diff --git a/i18n/en-US.json b/i18n/en-US.json index 3ae8765..1bb604a 100644 --- a/i18n/en-US.json +++ b/i18n/en-US.json @@ -706,7 +706,10 @@ "user": "Users", "device": "Devices", "ring_group": "Groups", - "voicemail": "Voicemail Boxes" + "voicemail": "Voicemail Boxes", + "__comment": "UI-1353: Add directory support for the virtual receptionist", + "__version": "v3.20_s4", + "directory": "Directory" }, "confirmMessages": { "deleteHoliday": "This holiday will be permanently deleted. Continue?", diff --git a/i18n/fr-FR.json b/i18n/fr-FR.json index 00d4516..a894ca4 100644 --- a/i18n/fr-FR.json +++ b/i18n/fr-FR.json @@ -665,7 +665,8 @@ "user": "Utilisateurs", "device": "Téléphones", "ring_group": "Groupes", - "voicemail": "Répondeurs" + "voicemail": "Répondeurs", + "directory": "Annuaire" }, "confirmMessages": { "deleteHoliday": "Ces vacances seront supprimées. Continuer?", diff --git a/submodules/devices/devices.js b/submodules/devices/devices.js index f1285d7..0a52017 100644 --- a/submodules/devices/devices.js +++ b/submodules/devices/devices.js @@ -157,20 +157,16 @@ define(function(require){ }; self.devicesGetEditData(data, function(dataDevice) { - var args = { - device: dataDevice - }; - - if (args.device.hasOwnProperty('provision')) { - self.devicesGetIterator(args.device.provision, function(template) { + if (dataDevice.hasOwnProperty('provision')) { + self.devicesGetIterator(dataDevice.provision, function(template) { if (template.hasOwnProperty('feature_keys')) { - if (!args.device.provision.hasOwnProperty('feature_keys')) { - args.device.provision.feature_keys = {}; + if (!dataDevice.provision.hasOwnProperty('feature_keys')) { + dataDevice.provision.feature_keys = {}; } for (var i = 0, len = template.feature_keys.iterate - 1; i < len; i++) { - if (!args.device.provision.feature_keys.hasOwnProperty(i)) { - args.device.provision.feature_keys[i] = { type: 'none' }; + if (!dataDevice.provision.feature_keys.hasOwnProperty(i)) { + dataDevice.provision.feature_keys[i] = { type: 'none' }; } } @@ -181,7 +177,8 @@ define(function(require){ }, success: function(data, status) { var keyTypes = [ 'none', 'presence', 'parking', 'personal_parking', 'speed_dial' ], - parkingSpots = []; + parkingSpots = [], + extra; data.data.sort(function(a, b) { return a.last_name.toLowerCase() > b.last_name.toLowerCase() ? 1 : -1; @@ -199,27 +196,29 @@ define(function(require){ } }); - $.extend(true, args, { + extra = { users: data.data, featureKeys:{ parkingSpots: parkingSpots, types: keyTypes } - }); + }; + + dataDevice.extra = dataDevice.hasOwnProperty(extra) ? $.extend(true, {}, dataDevice.extra, extra) : extra; - self.devicesRenderDevice(args, callbackSave, callbackDelete); + self.devicesRenderDevice(dataDevice, callbackSave, callbackDelete); } }); } else { - self.devicesRenderDevice(args, callbackSave, callbackDelete); + self.devicesRenderDevice(dataDevice, callbackSave, callbackDelete); } }, function() { - self.devicesRenderDevice(args, callbackSave, callbackDelete); + self.devicesRenderDevice(dataDevice, callbackSave, callbackDelete); }); } else { - self.devicesRenderDevice(args, callbackSave, callbackDelete); + self.devicesRenderDevice(dataDevice, callbackSave, callbackDelete); } }); }, @@ -262,13 +261,12 @@ define(function(require){ } }, - devicesRenderDevice: function(args, callbackSave, callbackDelete) { + devicesRenderDevice: function(data, callbackSave, callbackDelete) { var self = this, - data = args.device, mode = data.id ? 'edit' : 'add', type = data.device_type, popupTitle = mode === 'edit' ? monster.template(self, '!' + self.i18n.active().devices[type].editTitle, { name: data.name }) : self.i18n.active().devices[type].addTitle; - templateDevice = $(monster.template(self, 'devices-'+type, args)), + templateDevice = $(monster.template(self, 'devices-'+type, data)), deviceForm = templateDevice.find('#form_device'); if (data.hasOwnProperty('provision') && data.provision.hasOwnProperty('feature_keys')) { diff --git a/submodules/strategy/strategy.js b/submodules/strategy/strategy.js index a450f4e..3517ec6 100644 --- a/submodules/strategy/strategy.js +++ b/submodules/strategy/strategy.js @@ -68,6 +68,11 @@ define(function(require){ monster.pub('common.numbers.getListFeatures', function(features) { callback(null, features); }); + }, + directories: function (callback) { + self.strategyListDirectories(function (directories) { + callback(null, directories); + }); } }, function(err, results) { @@ -1256,7 +1261,7 @@ define(function(require){ popup = monster.ui.dialog(template, { title: self.i18n.active().strategy.popup.title+" - "+label}); var menuLineContainer = template.find('.menu-block .left .content'), - popupCallEntities = $.extend(true, {}, strategyData.callEntities, { voicemail: strategyData.voicemails }); + popupCallEntities = $.extend(true, {}, strategyData.callEntities, { voicemail: strategyData.voicemails }, { directory: strategyData.directories }); _.each(strategyData.callflows[name].flow.children, function(val, key) { menuLineContainer.append(monster.template(self, 'strategy-menuLine', { @@ -1417,7 +1422,7 @@ define(function(require){ container.find('.add-menu-line a').on('click', function(e) { e.preventDefault(); - var popupCallEntities = $.extend(true, {}, strategyData.callEntities, { voicemail: strategyData.voicemails }), + var popupCallEntities = $.extend(true, {}, strategyData.callEntities, { voicemail: strategyData.voicemails }, { directory: strategyData.directories }), menuLine = $(monster.template(self, 'strategy-menuLine', { callEntities: self.strategyGetCallEntitiesDropdownData(popupCallEntities) })), icon = menuLine.find('.target-select option:selected').parents('optgroup').data('icon'); @@ -1605,6 +1610,7 @@ define(function(require){ } switch(entityType) { + case 'directory': case 'user': case 'device': case 'voicemail': @@ -1657,6 +1663,9 @@ define(function(require){ }; switch(group.groupType) { + case 'directory': + group.groupIcon = 'icon-book'; + break; case 'user': group.groupIcon = 'icon-user'; break; @@ -1672,9 +1681,18 @@ define(function(require){ } group.entities.sort(function(a,b) { return (a.name.toLowerCase() > b.name.toLowerCase()); }); - if(group.groupType === "user") { - results.splice(0, 0, group); - } else { + if(group.groupType === 'directory') { + results.unshift(group); + } + else if (group.groupType === 'user') { + if (results[0].groupType === 'directory') { + results.splice(1, 0, group); + } + else { + results.unshift(group); + } + } + else { results.push(group); } }); @@ -2402,6 +2420,23 @@ define(function(require){ }); }, + strategyListDirectories: function(callbackSuccess, callbackError) { + var self = this; + + self.callApi({ + resource: 'directory.list', + data: { + accountId: self.accountId + }, + success: function(data, status) { + callbackSuccess && callbackSuccess(data.data); + }, + error: function(data, status) { + callbackError && callbackError(); + } + }); + }, + _strategyOnCurrentAccountUpdated: function(accountData) { var self = this; $('#strategy_custom_hours_timezone').text(timezone.formatTimezone(accountData.timezone)); diff --git a/submodules/users/users.js b/submodules/users/users.js index 133edb9..15938f3 100644 --- a/submodules/users/users.js +++ b/submodules/users/users.js @@ -1585,6 +1585,12 @@ define(function(require){ monster.ui.alert('error', self.i18n.active().users.errorNumberFaxing); } + monster.pub('common.numberSelector.render', { + container: featureTemplate.find('.number-select'), + inputName: 'caller_id', + number: data.hasOwnProperty('faxbox') ? data.faxbox.caller_id : undefined + }); + featureTemplate.find('.cancel-link').on('click', function() { popup.dialog('close').remove(); }); @@ -1594,7 +1600,7 @@ define(function(require){ }); featureTemplate.find('.save').on('click', function() { - var newNumber = featureTemplate.find('#caller_id').val(), + var newNumber = featureTemplate.find('input[name="caller_id"]').val(), args = { openedTab: 'features', callback: function() { @@ -1602,7 +1608,7 @@ define(function(require){ } }; - if ( switchFeature.prop('checked') ) { + if ( switchFeature.prop('checked') && newNumber ) { self.usersUpdateFaxing(data, newNumber, function(results) { args.userId = results.callflow.owner_id; diff --git a/views/devices-sip_device.html b/views/devices-sip_device.html index 9a4c224..ee127f6 100644 --- a/views/devices-sip_device.html +++ b/views/devices-sip_device.html @@ -1,16 +1,16 @@ -