Browse Source

Refactor users module adaptors (#230)

* Enforce linting rules

* Streamline faxing adaptor

* Streamline call forwarding adaptor

* Streamline license roles adaptor

* Streamline devices adaptor

* Streamline add user adaptor

* Fix incorrect prop names

Co-authored-by: Guillermo Gutiérrez <guillegr123@gmail.com>

* Remove legacy sort

Co-authored-by: Guillermo Gutiérrez <guillegr123@gmail.com>
4.3
Joris Tirado 6 years ago
committed by GitHub
parent
commit
1505586837
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 121 additions and 126 deletions
  1. +121
    -126
      submodules/users/users.js

+ 121
- 126
submodules/users/users.js View File

@ -1967,87 +1967,94 @@ define(function(require) {
}
},
/**
* @param {Object} data
* @param {Array} data.callflows
* @param {Array} data.provisioners
* @param {Array} data.vmboxes
* @return {Object}
*/
usersFormatAddUser: function(data) {
var self = this,
formattedData = {
hasProvisioner: self.appFlags.common.hasProvisioner && !_.isEmpty(data.provisioners),
sendToSameEmail: true,
nextExtension: '',
listExtensions: {},
createVmbox: true,
listVMBoxes: {}
},
arrayExtensions = [],
arrayVMBoxes = [],
allNumbers = [];
if (_.size(self.appFlags.global.servicePlansRole) > 0) {
formattedData.licensedUserRoles = self.appFlags.global.servicePlansRole;
}
_.each(data.callflows, function(callflow) {
_.each(callflow.numbers, function(number) {
if (number.length < 7) {
formattedData.listExtensions[number] = callflow;
arrayExtensions.push(number);
}
});
});
_.each(data.vmboxes, function(vmbox) {
formattedData.listVMBoxes[vmbox.mailbox] = vmbox;
arrayVMBoxes.push(vmbox.mailbox);
});
// We concat both arrays because we want to create users with the same number for the extension # and the vmbox,
// If for some reason a vmbox number exist without an extension, we still don't want to let them set their extension number to that number.
allNumbers = arrayExtensions.concat(arrayVMBoxes);
formattedData.nextExtension = parseInt(monster.util.getNextExtension(allNumbers)) + '';
formattedData.listProvisioners = _.map(data.provisioners, function(brand) {
var models = _.flatMap(brand.families, function(family) {
return _.map(family.models, function(model) {
model.family = family.name;
return model;
});
});
return {
id: brand.id,
name: brand.name,
models: models
};
servicePlansRole = self.appFlags.global.servicePlansRole,
listExtensions = _.flatMap(data.callflows, function(callflow) {
return _
.chain(callflow.numbers)
.filter(function(number) {
return _.size(number) < 7;
})
.map(function(number) {
return {
callflow: callflow,
extension: number
};
})
.value();
}),
mapVMBoxes = _.keyBy(data.vmboxes, 'mailbox'),
// We concat both arrays because we want to create users with the same number for the extension # and the vmbox,
// If for some reason a vmbox number exist without an extension, we still don't want to let them set their extension number to that number.
allNumbers = _
.chain([
_.map(listExtensions, 'extension'),
_.keys(mapVMBoxes, 'mailbox')
])
.flatten()
.uniq()
.value();
return _.merge({
createVmbox: true,
hasProvisioner: self.appFlags.common.hasProvisioner && !_.isEmpty(data.provisioners),
listExtensions: _
.chain(listExtensions)
.keyBy('extension')
.mapValues('callflow')
.value(),
listProvisioners: _
.chain(data.provisioners)
.map(function(brand) {
return _.merge({
models: _.flatMap(brand.families, function(family) {
return _.map(family.models, function(model) {
return _.merge({
family: family.name
}, model);
});
})
}, _.pick(brand, [
'id',
'name'
]));
})
.sortBy('name')
.value(),
listVMBoxes: mapVMBoxes,
nextExtension: parseInt(monster.util.getNextExtension(allNumbers)) + '',
sendToSameEmail: true
}, !_.isEmpty(servicePlansRole) && {
licensedUserRoles: servicePlansRole
});
return formattedData;
},
usersFormatFaxingData: function(data) {
var tempList = [],
listNumbers = {};
_.each(data.numbers, function(val, key) {
tempList.push(key);
});
tempList.sort(function(a, b) {
return a < b ? -1 : 1;
});
if (data.callflows) {
if (data.callflows.numbers.length > 0) {
listNumbers[data.callflows.numbers[0]] = data.callflows.numbers[0];
return _.merge({}, data, {
extra: {
listNumbers: _
.chain([
_.keys(data.numbers),
_
.chain(data.callflows)
.get('numbers', [])
.slice(0, 1)
.value()
])
.flatten()
.uniq()
.keyBy()
.value()
}
}
_.each(tempList, function(val, key) {
listNumbers[val] = val;
});
data.extra = $.extend(true, {}, data.extra, {
listNumbers: listNumbers
});
return data;
},
usersRenderConferencing: function(data) {
@ -2427,7 +2434,7 @@ define(function(require) {
usersRenderCallerId: function(currentUser, numberChoices) {
var self = this,
allowAnyOwnedNumberAsCallerID = monster.config.whitelabel && monster.config.whitelabel.allowAnyOwnedNumberAsCallerID ? true : false,
templateUser = $.extend(true, {allowAnyOwnedNumberAsCallerID: allowAnyOwnedNumberAsCallerID}, currentUser),
templateUser = $.extend(true, { allowAnyOwnedNumberAsCallerID: allowAnyOwnedNumberAsCallerID }, currentUser),
featureTemplate,
switchFeature;
@ -2491,28 +2498,25 @@ define(function(require) {
usersFormatCallForwardData: function(user) {
var self = this,
cfMode = 'off';
user.extra = user.extra || {};
isCallForwardConfigured = _.has(user, 'call_forward.enabled'),
isCallForwardEnabled = _.get(user, 'call_forward.enabled', false),
isFailoverEnabled = _.get(user, 'call_forward.failover', false);
//cfmode is on if call_forward.enabled = true
//cfmode is failover if call_forward.enabled = false & call_forward.failover = true
//cfmode is off if call_forward.enabled = false & call_forward.failover = false
if (user.hasOwnProperty('call_forward') && user.call_forward.hasOwnProperty('enabled')) {
if (user.call_forward.enabled === true) {
cfMode = 'on';
} else if (user.call_forward.enabled === false) {
cfMode = user.call_forward.hasOwnProperty('failover') && user.call_forward.failover === true ? 'failover' : 'off';
}
if (_.has(user.call_forward, 'number')) {
user.call_forward.number = monster.util.unformatPhoneNumber(user.call_forward.number);
return _.merge({}, user, _.merge({
extra: {
callForwardMode: !isCallForwardConfigured ? 'off'
: isCallForwardEnabled ? 'on'
: isFailoverEnabled ? 'failover'
: 'off'
}
}
user.extra.callForwardMode = cfMode;
return user;
}, isCallForwardConfigured && {
call_forward: _.merge({}, _.has(user, 'call_forward.number') && {
number: monster.util.unformatPhoneNumber(user.call_forward.number)
})
}));
},
usersRenderCallForward: function(currentUser) {
@ -2592,7 +2596,6 @@ define(function(require) {
args.openedTab = 'name';
}
self.usersUpdateUser(userToSave, function(data) {
args.userId = data.data.id;
@ -3485,7 +3488,7 @@ define(function(require) {
}
});
timezone.populateDropdown(template.find('#user_timezone'), dataTemplate.timezone || 'inherit', {inherit: self.i18n.active().defaultTimezone});
timezone.populateDropdown(template.find('#user_timezone'), dataTemplate.timezone || 'inherit', { inherit: self.i18n.active().defaultTimezone });
monster.ui.tooltips(template, {
options: {
@ -3682,45 +3685,37 @@ define(function(require) {
callback && callback(template, user);
});
},
usersFormatLicensedRolesData: function(user) {
var self = this,
formattedData = {
selectedRole: undefined,
availableRoles: self.appFlags.global.servicePlansRole
};
if (user.hasOwnProperty('service') && user.service.hasOwnProperty('plans') && _.size(user.service.plans) > 0) {
for (var key in user.service.plans) {
if (user.service.plans.hasOwnProperty(key)) {
formattedData.selectedRole = key;
break;
}
}
}
return formattedData;
},
usersFormatDevicesData: function(userId, data) {
usersFormatLicensedRolesData: function(user) {
var self = this,
formattedData = {
countSpare: 0,
assignedDevices: {},
unassignedDevices: {}
};
userPlanIds = _
.chain(user)
.get('service.plans', {})
.keys()
.value();
_.each(data, function(device) {
if (device.owner_id === userId) {
formattedData.assignedDevices[device.id] = device;
} else if (device.owner_id === '' || !('owner_id' in device)) {
formattedData.countSpare++;
formattedData.unassignedDevices[device.id] = device;
}
return _.merge({
availableRoles: self.appFlags.global.servicePlansRole
}, !_.isEmpty(userPlanIds) && {
selectedRole: _.head(userPlanIds)
});
},
formattedData.emptyAssigned = _.isEmpty(formattedData.assignedDevices);
formattedData.emptySpare = _.isEmpty(formattedData.unassignedDevices);
usersFormatDevicesData: function(userId, devices) {
var self = this,
assigned = _.filter(devices, { owner_id: userId }),
unassigned = _.flatten([
_.filter(devices, { owner_id: '' }),
_.reject(devices, _.partial(_.has, _, 'owner_id'))
]);
return formattedData;
return {
countSpare: _.size(unassigned),
emptyAssigned: _.isEmpty(assigned),
emptySpare: _.isEmpty(unassigned),
assignedDevices: _.keyBy(assigned, 'id'),
unassignedDevices: _.keyBy(unassigned, 'id')
};
},
/**


Loading…
Cancel
Save