From 5e80a008b2d6dfb6f30c452ebbab73e0b8a8d5f9 Mon Sep 17 00:00:00 2001 From: vbarkasov Date: Sat, 27 Jan 2018 00:34:23 +0700 Subject: [PATCH] Callcenter submodule: - save queue - delete queue - styling --- src/apps/callflows/i18n/en-US.json | 2 + .../submodules/callcenter/callcenter.css | 16 +- .../submodules/callcenter/callcenter.js | 275 +++++++----------- src/apps/callflows/submodules/user/user.js | 2 +- 4 files changed, 121 insertions(+), 174 deletions(-) diff --git a/src/apps/callflows/i18n/en-US.json b/src/apps/callflows/i18n/en-US.json index 0f7cd69..7889dd2 100644 --- a/src/apps/callflows/i18n/en-US.json +++ b/src/apps/callflows/i18n/en-US.json @@ -1113,6 +1113,7 @@ "name": "Name", "namePlaceholder": "Name", "nameDataContent": "Friendly name for this Queue", + "noName": "no name", "user": "User", "actions": "Actions", "addUser": "Add user to the queue", @@ -1125,6 +1126,7 @@ "memberTimeoutPlaceholder": "Member timeout (s)", "memberTimeoutDataContent": "How long to ring an agent's phone before moving to the next agent", "delete": "Delete", + "deleteConfirmMessage": "Are you sure you want to delete this queue?", "save": "Save", "thereIsCurrentlyNoUser": "There is currently no user in this queue", "userLabel": "Users list" diff --git a/src/apps/callflows/submodules/callcenter/callcenter.css b/src/apps/callflows/submodules/callcenter/callcenter.css index cb738f3..e9b9313 100644 --- a/src/apps/callflows/submodules/callcenter/callcenter.css +++ b/src/apps/callflows/submodules/callcenter/callcenter.css @@ -1,8 +1,18 @@ -.callflows-port #queue-form .users-table { - max-width: 450px; +.callflows-port #queue-form .users-table, +.callflows-port #queue-form .add-user-panel { + max-width: 400px; +} + +.callflows-port #queue-form .users-table tr th:nth-child(2), +.callflows-port #queue-form .users-table tr td:nth-child(2) { + width: 64px; + text-align: center; } .callflows-port #queue-form .add-user-panel { width: 100%; - max-width: 450px; +} + +.callflows-port .add-user-panel .callflow-panel_body { + text-align: center; } \ No newline at end of file diff --git a/src/apps/callflows/submodules/callcenter/callcenter.js b/src/apps/callflows/submodules/callcenter/callcenter.js index 80bd0a9..d5b8c58 100644 --- a/src/apps/callflows/submodules/callcenter/callcenter.js +++ b/src/apps/callflows/submodules/callcenter/callcenter.js @@ -77,10 +77,9 @@ define(function(require){ }, subscribe: { - //'callflows.queue.activate': 'activate', // TODO - 'callflows.queue.edit': 'queueEdit', 'callflows.fetchActions': 'callcenterDefineActions', - 'callflows.queue.popupEdit': 'queuePopupEdit' + 'callflows.queue.editPopup': 'queuePopupEdit', + 'callflows.queue.edit': 'queueEdit' }, @@ -367,7 +366,7 @@ define(function(require){ _callbacks = args.callbacks || {}, callbacks = { save_success: _callbacks.save_success || function(_data) { - // self.queueRenderList(parent); + self.queueRenderList(parent); self.queueEdit({ data: { @@ -384,7 +383,7 @@ define(function(require){ delete_success: _callbacks.delete_success || function() { target.empty(); - //self.queueRenderList(parent); + self.queueRenderList(parent); }, delete_error: _callbacks.delete_error, @@ -409,31 +408,23 @@ define(function(require){ defaults.field_data.users = users; if(typeof data == 'object' && data.id) { + self.queueGet(data.id, function (queueData) { + var render_data = $.extend(true, defaults, queueData); - monster.request({ - resource: 'callcenter.queues.get', - data: { - accountId: self.accountId, - queuesId: data.id, - generateError: false - }, - success: function (_data) { - var render_data = $.extend(true, defaults, _data); - render_data.field_data.old_list = []; - if('agents' in _data.data) { - render_data.field_data.old_list = _data.data.agents; - } - self.queueRender(render_data, target, callbacks); + render_data.field_data.old_list = []; + if('agents' in queueData.data) { + render_data.field_data.old_list = queueData.data.agents; + } + self.queueRender(render_data, target, callbacks); - if(typeof callbacks.after_render == 'function') { - callbacks.after_render(); - } + if(typeof(callbacks.after_render) === 'function') { + callbacks.after_render(); } }); } else { self.queueRender(defaults, target, callbacks); - if(typeof callbacks.after_render == 'function') { + if(typeof(callbacks.after_render) === 'function') { callbacks.after_render(); } } @@ -457,7 +448,7 @@ define(function(require){ }); }, - queueRenderList: function(_parent){ + queueRenderList: function(_parent, callback){ var self = this, parent = _parent || $('#queue-content'), i18nApp = self.i18n.active().callflows.callcenter; @@ -470,7 +461,7 @@ define(function(require){ $.each(data, function(key, val) { new_list.push({ id: val.id, - title: val.name || _t('voip_queue', 'no_name') + title: val.name || i18nApp.noName }); }); } @@ -482,20 +473,7 @@ define(function(require){ return new_list; }; - // TODO! - - /*$('#queue-listpanel', parent) - .empty() - .listpanel({ - label: i18nApp.queues_label, - identifier: 'queue-listview', - new_entity_label: i18nApp.add_queue_label, - data: map_crossbar_data(data.data), - publisher: winkstart.publish, - notifyMethod: 'queue.edit', - notifyCreateMethod: 'queue.edit', - notifyParent: parent - });*/ + callback && callback(); }); }, @@ -514,17 +492,23 @@ define(function(require){ }); }, - // TODO - /*activate: function(parent) { - var self = this, - queue_html = $(monster.template(self, 'callcenter-queue')); - - (parent || $('#monster_content')) - .empty() - .append(queue_html); + queueGet: function(queueId, callback) { + var self = this; + monster.request({ + resource: 'callcenter.queues.get', + data: { + accountId: self.accountId, + queuesId: queueId, + generateError: false + }, + success: function (_data) { + if(typeof(callback) === 'function') { + callback(_data); + } + } + }); + }, - self.queueRenderList(queue_html); - },*/ queueRender: function(data, target, callbacks) { var self = this; @@ -547,20 +531,21 @@ define(function(require){ ev.preventDefault(); if(monster.ui.valid($form)) { - var form_data = monster.ui.getFormData($form); + var form_data = monster.ui.getFormData($form[0]); - var new_list = []; + var agentsList = []; - $('.rows .row:not(#row_no_data)', queue_html).each(function() { - new_list.push($(this).dataset('id')); + $('.js-user-table-item:not(#row_no_data)', queue_html).each(function() { + agentsList.push($(this).data('id')); }); data.field_data.user_list = { old_list: data.data.agents || [], - new_list: new_list + new_list: agentsList }; self.queueSave(form_data, data, callbacks.save_success, callbacks.save_error); + } else { toastr.error(self.i18n.active().callflows.callcenter.formHasErrorsMessage); } @@ -630,11 +615,30 @@ define(function(require){ target.empty().append(queue_html); }, + agentsSave: function(queueId, agentsIdList, callback) { + var self = this; + + monster.request({ + resource: 'callcenter.agents.update', + data: { + accountId: self.accountId, + generateError: false, + queuesId: queueId, + data: agentsIdList + }, + success: function(data) { + if(typeof(callback) === 'function' && data.data) { + callback(data.data); + } + } + }); + }, + queueDelete: function(data, success, error) { var self = this; if(typeof data.data == 'object' && data.data.id) { - self.callApi({ + monster.request({ resource: 'callcenter.queues.delete', data: { accountId: self.accountId, @@ -686,146 +690,77 @@ define(function(require){ var self = this, normalized_data = self.normalizeData($.extend(true, {}, data.data, form_data)); - if (typeof data.data == 'object' && data.data.id) { - monster.request({ - resource: 'callcenter.queues.update', - data: { - accountId: self.accountId, - queuesId: data.id, - generateError: false, - data: normalized_data - }, - success: function (_data, status) { - if(typeof success == 'function') { - self.usersUpdate(data.field_data.user_list, _data.data.id, function() { - success(_data, status, 'update'); - }); - } - }, - error: function(_data, status) { - if(typeof error == 'function') { - error(_data, status, 'update'); + if(typeof data.data == 'object' && data.data.id) { + var queueId = data.data.id; + self.queueUpdate(queueId, normalized_data, function(queueData) { + self.agentsSave(queueId, data.field_data.user_list.new_list, function(agentsData) { + queueData.agents = agentsData.agents; + if(typeof(success) === 'function') { + success(queueData); } - } + }); }); } else { - monster.request({ - resource: 'callcenter.queues.create', - data: { - accountId: self.accountId, - generateError: false, - data: normalized_data - }, - success: function (_data, status) { - if(typeof success == 'function') { - self.usersUpdate(data.field_data.user_list, _data.data.id, function() { - success(_data, status, 'create'); - }); + self.queueCreate(normalized_data, function(queueData){ + self.agentsSave(queueData.id, data.field_data.user_list.new_list, function(agentsData) { + queueData.agents = agentsData.agents; + if(typeof(success) === 'function') { + success(queueData); } - }, - error: function(_data, status) { - if(typeof error == 'function') { - error(_data, status, 'update'); - } - } + }); }); } }, - usersUpdate: function(data, queue_id, success) { - var old_queue_user_list = data.old_list, - new_queue_user_list = data.new_list, - self = this, - users_updated_count = 0, - users_count = 0, - callback = function() { - users_updated_count++; - if(users_updated_count >= users_count) { - success(); - } - }; - + queueUpdate: function(queueId, data, success, error){ + var self = this; - if(old_queue_user_list) { - $.each(old_queue_user_list, function(k, v) { - if(new_queue_user_list.indexOf(v) === -1) { - //Request to update user without this queue. - users_count++; - self.singleUserUpdate(v, queue_id, 'remove', callback); + monster.request({ + resource: 'callcenter.queues.update', + data: { + accountId: self.accountId, + queuesId: queueId, + generateError: false, + data: data + }, + success: function (data) { + if(typeof(success) === 'function' && data.data) { + success(data.data); } - }); - - $.each(new_queue_user_list, function(k, v) { - if(old_queue_user_list.indexOf(v) === -1) { - users_count++; - self.singleUserUpdate(v, queue_id, 'add', callback); + }, + error: function(data) { + if(typeof(error) === 'function') { + error(data); } - }); - } else { - if(new_queue_user_list) { - $.each(new_queue_user_list, function(k, v) { - users_count++; - self.singleUserUpdate(v, queue_id, 'add', callback); - }); } - } - - /* If no users has been updated, we still need to refresh the view for the other attributes */ - if(users_count == 0) { - success(); - } + }); }, - singleUserUpdate: function(user_id, queue_id, action, callback) { + queueCreate: function(data, success, error){ var self = this; - self.callApi({ - resource: 'user.get', + monster.request({ + resource: 'callcenter.queues.create', data: { accountId: self.accountId, - userId: user_id, - generateError: false + generateError: false, + data: data }, - success: function(_data, status) { - if(action =='add') { - if(!_data.data.queues || typeof _data.data.queues != 'object') { - _data.data.queues = []; - } - _data.data.queues.push(queue_id); - - /* If a user is added to a queue, but is not enabled as an agent, we enable this user automatically */ - if(!('queue_pin' in _data.data)) { - _data.data.queue_pin = ''; - } - } else { //remove - _data.data.queues.splice(_data.data.queues.indexOf(queue_id), 1); + success: function (_data) { + if(typeof(success) === 'function') { + success(_data.data); + } + }, + error: function(_data) { + if(typeof(error) === 'function') { + error(_data); } - - self.callApi({ - resource: 'user.update', - data: { - accountId: self.accountId, - userId: user_id, - data: _data.data, - generateError: false - }, - success: function(_data, status) { - if(typeof callback === 'function') { - callback(status); - } - }, - error: function(_data, status) { - if(typeof callback === 'function') { - callback(status); - } - } - }); } }); }, normalizeData: function(form_data) { - delete form_data.users; + delete form_data.user_id; return form_data; } }; diff --git a/src/apps/callflows/submodules/user/user.js b/src/apps/callflows/submodules/user/user.js index 1ed6658..d36e37c 100644 --- a/src/apps/callflows/submodules/user/user.js +++ b/src/apps/callflows/submodules/user/user.js @@ -294,7 +294,7 @@ define(function(require){ }, hotdesk: {}, contact_list: { - exclude: false, + exclude: false }, priv_level: 'user', music_on_hold: {},