diff --git a/app/model/Group.js b/app/model/Group.js index 0ca94444..489c393b 100644 --- a/app/model/Group.js +++ b/app/model/Group.js @@ -16,5 +16,39 @@ Ext.define('NgcpCsc.model.Group', { }, { name: 'hunt_timeout', type: 'string' + }, { + name: 'primary_number', + type: 'string' + }, { + name: 'alias_numbers', + type: 'string' + }, { + name: 'seats', + type: 'string' + }, { + name: 'alias_numbers_split', + type: 'string', + depends: ['alias_numbers'], + convert: function (v, record) { + var dataToSplit = record.data.alias_numbers; + return dataToSplit.replace(/,/g, ", "); + } + }, { + name: 'seats_split', + type: 'string', + depends: ['seats'], + convert: function (v, record) { + var dataToSplit = record.data.seats; + var dataInArray = dataToSplit.split(','); + var resultArray = []; + var store = Ext.getStore('Seats'); + for (var data in dataInArray) { + var rec = store.findRecord('id', dataInArray[data]); + var nameToPush = rec ? rec.get('name') : ''; + resultArray.push(nameToPush); + } + var result = resultArray.join(', '); + return result; + } }] }); diff --git a/app/utils/locales.js b/app/utils/locales.js index 75f8da06..19777f5a 100644 --- a/app/utils/locales.js +++ b/app/utils/locales.js @@ -1280,6 +1280,13 @@ Ext.define('Ngcp.csc.locales', { fr: 'Groups', sp: 'Groups' }, + seats: { + en: 'Seats', + it: 'Seats', + de: 'Seats', + fr: 'Seats', + sp: 'Seats' + }, primary_number: { en: 'Primary number', it: 'Primary number', @@ -1929,6 +1936,13 @@ Ext.define('Ngcp.csc.locales', { fr: 'Choose one or more group names', sp: 'Choose one or more group names' }, + choose_one_or_more_seats: { + en: 'Choose one or more seat names', + it: 'Choose one or more seat names', + de: 'Choose one or more seat names', + fr: 'Choose one or more seat names', + sp: 'Choose one or more seat names' + }, choose_one_or_more_alias_numbers: { en: 'Choose one or more alias numbers', it: 'Choose one or more alias numbers', @@ -2385,6 +2399,13 @@ Ext.define('Ngcp.csc.locales', { fr: 'Group:', sp: 'Group:' }, + seats: { + en: 'Seats:', + it: 'Seats:', + de: 'Seats:', + fr: 'Seats:', + sp: 'Seats:' + }, ago: { en: 'ago', it: 'ago', diff --git a/classic/src/view/common/gridfilters/GridFilters.js b/classic/src/view/common/gridfilters/GridFilters.js index 70f7c097..c9d26403 100644 --- a/classic/src/view/common/gridfilters/GridFilters.js +++ b/classic/src/view/common/gridfilters/GridFilters.js @@ -9,8 +9,8 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { ui: 'core-container', - // TODO: Fix input field not working on first input (always or some times?) - // TODO: Pls make combo/tagfields editable + // TODO TT#16554: Fix input field not working on first + // input. See GridFiltersController.js line 21 initComponent: function() { this.items = [{ @@ -134,10 +134,10 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { }] }, { xtype: 'form', - reference: 'pbxSeatsFilterForm', - hidden:true, + hidden: true, + reference: 'pbxGroupsFilterForm', bind: { - hidden: '{filtergrid.pbxSeatsFilterHideState}' + hidden: '{filtergrid.pbxGroupsFilterHideState}' }, margin: 20, layout: 'responsivecolumn', @@ -149,13 +149,43 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { labelAlign: 'left', width: 400, labelWidth: 120, - bind: '{filtergrid.seats_extension}', + bind: '{filtergrid.groups_extension}', fieldLabel: Ngcp.csc.locales.filters.extension[localStorage.getItem('languageSelected')], listeners: { delay: 100, change: 'submitFilters' } }, { + xtype: 'combo', + labelAlign: 'left', + store: 'HuntPolicies', + displayField: 'policy', + valueField: 'policy', + editable: true, + width: 400, + labelWidth: 120, + bind: '{filtergrid.hunt_policy}', + fieldLabel: Ngcp.csc.locales.filters.hunt_policy[localStorage.getItem('languageSelected')], + listeners: { + delay: 100, + change: 'submitFilters' + } + }, { + xtype: 'textfield', + labelAlign: 'left', + width: 400, + labelWidth: 120, + bind: '{filtergrid.hunt_timeout}', + fieldLabel: Ngcp.csc.locales.filters.hunt_timeout[localStorage.getItem('languageSelected')], + listeners: { + delay: 100, + change: 'submitFilters' + } + }] + }, { + flex: 1, + userCls: 'small-100 big-50', + items: [{ xtype: 'combo', labelAlign: 'left', store: 'PrimaryNumbers', @@ -170,11 +200,7 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { delay: 100, change: 'submitFilters' } - }] - }, { - flex: 1, - userCls: 'small-100 big-50', - items: [{ + }, { xtype: 'tagfield', labelAlign: 'left', store: 'AliasNumbers', @@ -191,13 +217,13 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { }, { xtype: 'tagfield', labelAlign: 'left', - store: 'Groups', + store: 'Seats', displayField: 'name', valueField: 'id', width: 400, labelWidth: 120, - bind: '{filtergrid.groups}', - fieldLabel: Ngcp.csc.locales.filters.groups[localStorage.getItem('languageSelected')], + bind: '{filtergrid.seats}', + fieldLabel: Ngcp.csc.locales.filters.seats[localStorage.getItem('languageSelected')], listeners: { delay: 100, change: 'submitFilters' @@ -206,10 +232,10 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { }] }, { xtype: 'form', + reference: 'pbxSeatsFilterForm', hidden:true, - reference: 'pbxGroupsFilterForm', bind: { - hidden: '{filtergrid.pbxGroupsFilterHideState}' + hidden: '{filtergrid.pbxSeatsFilterHideState}' }, margin: 20, layout: 'responsivecolumn', @@ -221,7 +247,7 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { labelAlign: 'left', width: 400, labelWidth: 120, - bind: '{filtergrid.groups_extension}', + bind: '{filtergrid.seats_extension}', fieldLabel: Ngcp.csc.locales.filters.extension[localStorage.getItem('languageSelected')], listeners: { delay: 100, @@ -230,14 +256,14 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { }, { xtype: 'combo', labelAlign: 'left', - store: 'HuntPolicies', - displayField: 'policy', - valueField: 'policy', - editable: true, + store: 'PrimaryNumbers', + bind: '{filtergrid.primary_number}', + displayField: 'number', + valueField: 'number', width: 400, labelWidth: 120, - bind: '{filtergrid.hunt_policy}', - fieldLabel: Ngcp.csc.locales.filters.hunt_policy[localStorage.getItem('languageSelected')], + editable: true, + fieldLabel: Ngcp.csc.locales.filters.primary_number[localStorage.getItem('languageSelected')], listeners: { delay: 100, change: 'submitFilters' @@ -247,12 +273,29 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { flex: 1, userCls: 'small-100 big-50', items: [{ - xtype: 'textfield', + xtype: 'tagfield', labelAlign: 'left', + store: 'AliasNumbers', + displayField: 'number', + valueField: 'number', width: 400, labelWidth: 120, - bind: '{filtergrid.hunt_timeout}', - fieldLabel: Ngcp.csc.locales.filters.hunt_timeout[localStorage.getItem('languageSelected')], + bind: '{filtergrid.alias_numbers}', + fieldLabel: Ngcp.csc.locales.filters.alias_numbers[localStorage.getItem('languageSelected')], + listeners: { + delay: 100, + change: 'submitFilters' + } + }, { + xtype: 'tagfield', + labelAlign: 'left', + store: 'Groups', + displayField: 'name', + valueField: 'id', + width: 400, + labelWidth: 120, + bind: '{filtergrid.groups}', + fieldLabel: Ngcp.csc.locales.filters.groups[localStorage.getItem('languageSelected')], listeners: { delay: 100, change: 'submitFilters' diff --git a/classic/src/view/common/gridfilters/GridFiltersController.js b/classic/src/view/common/gridfilters/GridFiltersController.js index cbd40715..1845e28b 100644 --- a/classic/src/view/common/gridfilters/GridFiltersController.js +++ b/classic/src/view/common/gridfilters/GridFiltersController.js @@ -199,11 +199,17 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { var extension = vm.get('filtergrid.groups_extension') ? vm.get('filtergrid.groups_extension').toLowerCase().split(',') : []; var hunt_policy = vm.get('filtergrid.hunt_policy') ? vm.get('filtergrid.hunt_policy').toLowerCase().split(',') : []; var hunt_timeout = vm.get('filtergrid.hunt_timeout') ? vm.get('filtergrid.hunt_timeout').toLowerCase().split(',') : []; + var primary_number = vm.get('filtergrid.primary_number') ? vm.get('filtergrid.primary_number').split(',') : []; + var alias_numbers = vm.get('filtergrid.alias_numbers') ? vm.get('filtergrid.alias_numbers').toString().split(',') : []; + var seats = vm.get('filtergrid.seats') ? vm.get('filtergrid.seats').toString().split(',') : []; var retVal = true; if (fieldInput && record.get('name').toLowerCase().indexOf(fieldInput) == -1 || extension && record.get('extension').toLowerCase().indexOf(extension) == -1 || hunt_policy && record.get('hunt_policy').toLowerCase().indexOf(hunt_policy) == -1 || - hunt_timeout && record.get('hunt_timeout').toLowerCase().indexOf(hunt_timeout) == -1 + hunt_timeout && record.get('hunt_timeout').toLowerCase().indexOf(hunt_timeout) == -1 || + primary_number && record.get('primary_number').indexOf(primary_number) == -1 || + alias_numbers && record.get('alias_numbers').indexOf(alias_numbers) == -1 || + seats && record.get('seats').indexOf(seats) == -1 ) { retVal = false; } diff --git a/classic/src/view/pages/pbxconfig/PbxConfigController.js b/classic/src/view/pages/pbxconfig/PbxConfigController.js index 64151e93..9dd573e5 100644 --- a/classic/src/view/pages/pbxconfig/PbxConfigController.js +++ b/classic/src/view/pages/pbxconfig/PbxConfigController.js @@ -339,6 +339,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { var groupsField = Ext.ComponentQuery.query('#' + viewName + '-tagfield-groups-' + id) || ''; var huntPolicyField = Ext.ComponentQuery.query('#' + viewName + '-combo-hunt_policy-' + id) || ''; var huntTimeoutField = Ext.ComponentQuery.query('#' + viewName + '-textfield-hunt_timeout-' + id) || ''; + var seatsField = Ext.ComponentQuery.query('#' + viewName + '-tagfield-seats-' + id) || ''; var deviceField = Ext.ComponentQuery.query('#' + viewName + '-textfield-device-' + id) || ''; var macField = Ext.ComponentQuery.query('#' + viewName + '-textfield-mac-' + id) || ''; var statusField = Ext.ComponentQuery.query('#' + viewName + '-textfield-status-' + id) || ''; @@ -351,6 +352,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { var huntTimeoutLabel = Ext.ComponentQuery.query('#' + viewName + '-label-hunt_timeout-' + id) || ''; var huntTimeoutPreLabel = Ext.ComponentQuery.query('#' + viewName + '-prelabel-hunt_timeout-' + id) || ''; var huntTimeoutPostLabel = Ext.ComponentQuery.query('#' + viewName + '-postlabel-hunt_timeout-' + id) || ''; + var seatsLabel = Ext.ComponentQuery.query('#' + viewName + '-label-seats-' + id) || ''; var deviceLabel = Ext.ComponentQuery.query('#' + viewName + '-label-device-' + id) || ''; var macLabel = Ext.ComponentQuery.query('#' + viewName + '-label-mac-' + id) || ''; var statusLabel = Ext.ComponentQuery.query('#' + viewName + '-label-status-' + id) || ''; @@ -380,6 +382,9 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { extensionLabel[0].setHidden(labelHide); huntPolicyLabel[0].setHidden(labelHide); huntTimeoutLabel[0].setHidden(labelHide); + primaryNumberLabel[0].setHidden(labelHide); + aliasNumbersLabel[0].setHidden(labelHide); + seatsLabel[0].setHidden(labelHide); switch (hideOrShow) { case 'show': huntTimeoutPreLabel[0].addCls('pbx-margin-top'); @@ -393,9 +398,15 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { extensionField[0].setHidden(fieldHide); huntPolicyField[0].setHidden(fieldHide); huntTimeoutField[0].setHidden(fieldHide); + primaryNumberField[0].setHidden(fieldHide); + aliasNumbersField[0].setHidden(fieldHide); + seatsField[0].setHidden(fieldHide); huntTimeoutField[0].focus(); huntPolicyField[0].focus(); extensionField[0].focus(); + primaryNumberField[0].focus(); + aliasNumbersField[0].focus(); + seatsField[0].focus(); nameField[0].focus(); break; case 'devices': diff --git a/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js b/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js index 0f741538..b5ae756b 100644 --- a/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js +++ b/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js @@ -223,6 +223,123 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.GroupsGrid', { } }] }] + }, { + name: 'primary_number', + defaults: { + padding: '0 0 15 0' + }, + items: [{ + xtype: 'label', + cls: 'pbx-data-value', + text: Ngcp.csc.locales.pbxconfig.primary_number[localStorage.getItem('languageSelected')], + width: 130 + }, { + xtype: 'label', + bind: { + id: 'groups-label-primary_number-{record.id}', + text: '{record.primary_number}' + } + }, { + xtype: 'combo', + store: 'PrimaryNumbers', + editable: false, + width: 250, + displayField: 'number', + valueField: 'number', + hidden: true, + emptyText: Ngcp.csc.locales.pbxconfig.choose_new_primary_number[localStorage.getItem('languageSelected')], + bind: { + id: 'groups-combo-primary_number-{record.id}' + }, + listeners: { + focus: { + fn: 'setFieldValue' + }, + blur: { + fn: 'fieldBlurred', + el: 'element' + }, + specialkey: 'onEnterPressed' + } + }] + }, { + name: 'alias_numbers', + defaults: { + padding: '0 0 15 0' + }, + items: [{ + xtype: 'label', + cls: 'pbx-data-value', + text: Ngcp.csc.locales.pbxconfig.alias_numbers[localStorage.getItem('languageSelected')], + width: 130 + }, { + xtype: 'label', + bind: { + id: 'groups-label-alias_numbers-{record.id}', + text: '{record.alias_numbers_split}' + } + }, { + xtype: 'tagfield', + valueField: 'number', + store: 'AliasNumbers', + width: 250, + displayField: 'number', + hidden: true, + emptyText: Ngcp.csc.locales.pbxconfig.choose_one_or_more_alias_numbers[localStorage.getItem('languageSelected')], + bind: { + id: 'groups-tagfield-alias_numbers-{record.id}' + }, + listeners: { + focus: { + fn: 'setFieldValue' + }, + blur: { + fn: 'fieldBlurred', + el: 'element' + }, + specialkey: 'onEnterPressed' + } + }] + }, { + name: 'seats', + defaults: { + padding: '0 0 15 0' + }, + items: [{ + xtype: 'label', + cls: 'pbx-data-value', + text: Ngcp.csc.locales.common.seats[localStorage.getItem('languageSelected')], + width: 130 + }, { + xtype: 'label', + hidden: false, + bind: { + id: 'groups-label-seats-{record.id}', + text: '{record.seats_split}' + + } + }, { + xtype: 'tagfield', + valueField: 'id', + store: 'Seats', + width: 250, + displayField: 'name', + hidden: true, + emptyText: Ngcp.csc.locales.pbxconfig.choose_one_or_more_seats[localStorage.getItem('languageSelected')], + bind: { + id: 'groups-tagfield-seats-{record.id}' + }, + listeners: { + focus: { + fn: 'setFieldValue' + }, + blur: { + fn: 'fieldBlurred', + el: 'element' + }, + specialkey: 'onEnterPressed' + } + }] }, { xtype: 'label', bind: { diff --git a/resources/data/aliasNumbers.json b/resources/data/aliasNumbers.json index 8c10ed8c..c0e7c2b5 100644 --- a/resources/data/aliasNumbers.json +++ b/resources/data/aliasNumbers.json @@ -85,6 +85,36 @@ }, { "number": "012369" + }, + { + "number": "012370" + }, + { + "number": "012371" + }, + { + "number": "012372" + }, + { + "number": "012373" + }, + { + "number": "012374" + }, + { + "number": "012375" + }, + { + "number": "012376" + }, + { + "number": "012377" + }, + { + "number": "012378" + }, + { + "number": "012379" } ] } diff --git a/resources/data/groups.json b/resources/data/groups.json index 81f71124..ad6f10bf 100644 --- a/resources/data/groups.json +++ b/resources/data/groups.json @@ -4,24 +4,36 @@ "name": "Marketing", "extension": "201", "hunt_policy": "Serial", - "hunt_timeout": "60" + "hunt_timeout": "60", + "primary_number": "43991026", + "alias_numbers": ["012370", "012371"], + "seats": [11] },{ "id" : 2, "name": "Development", "extension": "301", "hunt_policy": "Parallel", - "hunt_timeout": "320" + "hunt_timeout": "320", + "primary_number": "43991027", + "alias_numbers": ["012372", "012373"], + "seats": [1, 4] }, { "id" : 3, "name": "Sales", "extension": "401", "hunt_policy": "Sequential", - "hunt_timeout": "10" + "hunt_timeout": "10", + "primary_number": "43991028", + "alias_numbers": ["012374", "012375"], + "seats": [5, 3, 8] }, { "id" : 4, "name": "Operations", "extension": "601", "hunt_policy": "Serial", - "hunt_timeout": "40" + "hunt_timeout": "40", + "primary_number": "43991029", + "alias_numbers": ["012376", "012377"], + "seats": [2, 6] }] } diff --git a/resources/data/primaryNumbers.json b/resources/data/primaryNumbers.json index 0a57aafd..f70a2932 100644 --- a/resources/data/primaryNumbers.json +++ b/resources/data/primaryNumbers.json @@ -73,6 +73,18 @@ }, { "number": "43991025" + }, + { + "number": "43991026" + }, + { + "number": "43991027" + }, + { + "number": "43991028" + }, + { + "number": "43991029" } ] }