From 26224ec89d91cc141ff57a6c398b9031d781c9fd Mon Sep 17 00:00:00 2001 From: raxelsen Date: Thu, 15 Nov 2018 12:49:59 +0100 Subject: [PATCH] TT#47384 Page to manage CallQueueConfiguration What has been done: - TT#47384, CallQueueConfig: As a PBXAdmin, I want to have a separate page to be able to manage CallQueueConfigurations - TT#47385, CallQueueConfig: As a PBXAdmin, I want to see a list of all active CallQueueConfigurations Change-Id: I6ed9b1ee4a1a8518b8124a4dc22fac1988b0bc11 --- src/api/pbx-config.js | 41 ++++- src/api/subscriber.js | 29 +++ src/components/layouts/Default.vue | 8 + src/components/layouts/MainMenu.vue | 11 ++ .../PbxConfiguration/CscPbxCallQueue.vue | 166 ++++++++++++++++++ .../PbxConfiguration/CscPbxCallQueues.vue | 98 +++++++++++ .../pages/PbxConfiguration/CscPbxDevice.vue | 35 ++-- .../pages/PbxConfiguration/CscPbxDevices.vue | 1 - .../pages/PbxConfiguration/CscPbxGroup.vue | 3 + .../pages/PbxConfiguration/CscPbxSeat.vue | 25 +-- src/locales/en.json | 9 +- src/routes.js | 9 + src/store/pbx-config/actions.js | 12 +- src/store/pbx-config/getters.js | 3 + src/store/pbx-config/mutations.js | 16 ++ src/store/pbx-config/state.js | 3 +- src/themes/app.common.styl | 36 +++- src/themes/app.variables.styl | 4 +- 18 files changed, 464 insertions(+), 45 deletions(-) create mode 100644 src/components/pages/PbxConfiguration/CscPbxCallQueue.vue create mode 100644 src/components/pages/PbxConfiguration/CscPbxCallQueues.vue diff --git a/src/api/pbx-config.js b/src/api/pbx-config.js index 2dd608cb..8cf47710 100644 --- a/src/api/pbx-config.js +++ b/src/api/pbx-config.js @@ -1,10 +1,23 @@ import _ from 'lodash'; import Vue from 'vue'; -import { getNumbers, assignNumbers } from './user'; -import { createSubscriber, deleteSubscriber, setDisplayName, - setPbxExtension, setPbxHuntPolicy, setPbxHuntTimeout, - setPbxGroupMemberIds, setPbxGroupIds, getSubscribers, getSubscriber } from './subscriber'; +import { + getNumbers, + assignNumbers +} from './user'; +import { + createSubscriber, + deleteSubscriber, + setDisplayName, + setPbxExtension, + setPbxHuntPolicy, + setPbxHuntTimeout, + setPbxGroupMemberIds, + setPbxGroupIds, + getSubscribers, + getSubscriber, + getSubscribersByCallQueueEnabled +} from './subscriber'; import uuid from 'uuid'; import { getList, get, patchReplace } from './common' @@ -509,3 +522,23 @@ export function setProfile(deviceId, profileId) { }); }); } + +export function getCallQueueConfigurations() { + return new Promise((resolve, reject)=>{ + getSubscribersByCallQueueEnabled().then((subscribers)=>{ + let callQueues = subscribers.map((subscriber)=>{ + return { + display_name: _.get(subscriber, 'display_name', null), + is_pbx_group: _.get(subscriber, 'is_pbx_group', null), + max_queue_length: _.get(subscriber, 'prefs.max_queue_length', 5), + queue_wrap_up_time: _.get(subscriber, 'prefs.queue_wrap_up_time', 10) + }; + }); + resolve({ + items: callQueues + }); + }).catch((err)=>{ + reject(err); + }); + }); +} diff --git a/src/api/subscriber.js b/src/api/subscriber.js index 71ae1888..96db5fdf 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -303,3 +303,32 @@ export function blockAnonymous(id) { export function allowAnonymous(id) { return setBlockAnonymous(id, false); } + +export function getSubscribersByCallQueueEnabled() { + return new Promise((resolve, reject)=>{ + let prefsByCallQueueEnabled = []; + Promise.resolve().then(()=>{ + return getList({ + path: 'api/subscriberpreferences/', + root: '_embedded.ngcp:subscriberpreferences', + all: true + }); + }).then((prefs)=>{ + let subscriberPromises = []; + prefsByCallQueueEnabled = prefs.items.filter((pref)=>{ + return pref.cloud_pbx_callqueue === true; + }); + prefsByCallQueueEnabled.forEach((pref)=>{ + subscriberPromises.push(getSubscriber(pref.subscriber_id)); + }); + return Promise.all(subscriberPromises); + }).then((subscribers)=>{ + subscribers.forEach((subscriber, index)=>{ + subscriber.prefs = prefsByCallQueueEnabled[index]; + }); + resolve(subscribers); + }).catch((err)=>{ + reject(err); + }); + }); +} diff --git a/src/components/layouts/Default.vue b/src/components/layouts/Default.vue index 675992fd..09f948f0 100644 --- a/src/components/layouts/Default.vue +++ b/src/components/layouts/Default.vue @@ -425,6 +425,10 @@ .q-item padding-top $flex-gutter-xs * 1.4 padding-bottom $flex-gutter-xs * 1.4 + .q-item-side-left + min-width auto + .q-item-main + margin-left $flex-gutter-sm .q-icon color $main-menu-icon-color .q-item-label @@ -539,4 +543,8 @@ padding 0 #csc-header left $main-menu-minimized-width + .mobile + .layout-aside-left + width auto + right 0 diff --git a/src/components/layouts/MainMenu.vue b/src/components/layouts/MainMenu.vue index cbe39471..00a2de4e 100644 --- a/src/components/layouts/MainMenu.vue +++ b/src/components/layouts/MainMenu.vue @@ -180,6 +180,17 @@ :label="$t('navigation.pbxConfiguration.devices')" /> + + + + diff --git a/src/components/pages/PbxConfiguration/CscPbxCallQueue.vue b/src/components/pages/PbxConfiguration/CscPbxCallQueue.vue new file mode 100644 index 00000000..df6f2c11 --- /dev/null +++ b/src/components/pages/PbxConfiguration/CscPbxCallQueue.vue @@ -0,0 +1,166 @@ + + + + + + diff --git a/src/components/pages/PbxConfiguration/CscPbxCallQueues.vue b/src/components/pages/PbxConfiguration/CscPbxCallQueues.vue new file mode 100644 index 00000000..94323562 --- /dev/null +++ b/src/components/pages/PbxConfiguration/CscPbxCallQueues.vue @@ -0,0 +1,98 @@ + + + + + + diff --git a/src/components/pages/PbxConfiguration/CscPbxDevice.vue b/src/components/pages/PbxConfiguration/CscPbxDevice.vue index a496cbb6..fd808089 100644 --- a/src/components/pages/PbxConfiguration/CscPbxDevice.vue +++ b/src/components/pages/PbxConfiguration/CscPbxDevice.vue @@ -1,34 +1,44 @@