diff --git a/app/model/Device.js b/app/model/Device.js index 7936591d..fbdd30f0 100644 --- a/app/model/Device.js +++ b/app/model/Device.js @@ -35,6 +35,8 @@ Ext.define('NgcpCsc.model.Device', { var lineHorizontalCls = seat.name ? 'connection-left-right-assigned' : 'connection-left-right-unassigned'; var lineVerticalCls = seat.name ? 'connection-top-bottom-assigned' : 'connection-top-bottom-unassigned'; var btnPos = "top:" + seat.position.top + ";left:" + seat.position.left; + var store = Ext.getStore('Seats'); + var seatNameToFullName = seat.name ? store.findRecord('id', seat.name).get('name') : ''; var rectPos, top = seat.position.top, left = seat.position.left, @@ -69,7 +71,7 @@ Ext.define('NgcpCsc.model.Device', { retVal += '
' + - '' + seat.order + '' + (seat.name || '') + '' + seat.order + '' + (seatNameToFullName || '') + ' 0) { + me.fireEvent('showmessage', false, Ngcp.csc.locales.common.fields_required[localStorage.getItem('languageSelected')]); + } else if (invalidCheck > 0) { + me.fireEvent('showmessage', false, Ngcp.csc.locales.common.field_invalid[localStorage.getItem('languageSelected')]); + } }, addNewEmptyRowToGrid: function(store, storeName, newId) { @@ -199,40 +249,28 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { var view = this.getView(); switch (storeName) { case 'Seats': - newRec = store.add({ - "id": newId, - "name": "", - "extension": "", - "group": "", - "numbers": "", - "phone_devices": "" + var newSeat = Ext.create('NgcpCsc.model.Seat', { + id: newId }); + newRec = store.add(newSeat); break; case 'Groups': - newRec = store.add({ - "id": newId, - "name": "", - "extension": "", - "hunt_policy": "", - "hunt_timeout": "" + var newGroup = Ext.create('NgcpCsc.model.Group', { + id: newId }); + newRec = store.add(newGroup); break; case 'Devices': - newRec = store.add({ - "id": newId, - "name": "", - "device": "", - "mac": "", - "status": "", - "extension": "", - "extension2": "" + var newDevice = Ext.create('NgcpCsc.model.Device', { + id: newId }); + newRec = store.add(newDevice); break; } view.down('grid').getSelectionModel().select(newRec); - Ext.Function.defer(function(){ + Ext.Function.defer(function() { view.fireEvent('cardContainerResized', view); - },1); + }, 1); }, addPbx: function() { @@ -323,9 +361,16 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { extensionLabel[0].setHidden(labelHide); huntPolicyLabel[0].setHidden(labelHide); huntTimeoutLabel[0].setHidden(labelHide); - // To adjust a little bit 'for' and 'seconds' labels downwards when fields are shown - huntTimeoutPreLabel[0].toggleCls('pbx-margin-top'); - huntTimeoutPostLabel[0].toggleCls('pbx-margin-top'); + switch (hideOrShow) { + case 'show': + huntTimeoutPreLabel[0].addCls('pbx-margin-top'); + huntTimeoutPostLabel[0].addCls('pbx-margin-top'); + break; + case 'hide': + huntTimeoutPreLabel[0].removeCls('pbx-margin-top'); + huntTimeoutPostLabel[0].removeCls('pbx-margin-top'); + break; + }; extensionField[0].setHidden(fieldHide); huntPolicyField[0].setHidden(fieldHide); huntTimeoutField[0].setHidden(fieldHide); @@ -390,9 +435,9 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { var view = this.getView(); var store = card.store; store.remove(card); - Ext.Function.defer(function(){ + Ext.Function.defer(function() { view.fireEvent('cardContainerResized', view); - },1); + }, 1); }, toggleCancelCard: function(el, state) { @@ -449,7 +494,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.PbxConfigController', { var recId = event.id.split("-")[3]; var iconDivId = 'edit' + storeName.slice(0, -1) + '-' + recId; var iconDiv = document.getElementById(iconDivId); - me.saveCard(iconDiv); + me.saveCard(iconDiv, false); } }, 1); } diff --git a/classic/src/view/pages/pbxconfig/devices/DevicesController.js b/classic/src/view/pages/pbxconfig/devices/DevicesController.js index e71fb79d..ecbd6483 100644 --- a/classic/src/view/pages/pbxconfig/devices/DevicesController.js +++ b/classic/src/view/pages/pbxconfig/devices/DevicesController.js @@ -15,7 +15,22 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.DevicseController', { return; }; if (el.dataset.callback) { + var fields = this.getView().query('textfield'); + var fieldToKeepFocused; + for (i = 0; i < fields.length; i++) { + if (fields[i].hasFocus) { + fieldToKeepFocused = fields[i]; + } + } Ext.Function.defer(eval('this.' + el.dataset.callback), 1, this, [el]); + if (fieldToKeepFocused) { + fieldToKeepFocused.suspendEvent('blur'); + Ext.Function.defer( + function() { + fieldToKeepFocused.resumeEvent('blur'); + }, 50 + ); + } }; }, onMouseEntered: function(event, el) { diff --git a/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js b/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js index 9473c17f..44e9494d 100644 --- a/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js +++ b/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js @@ -16,7 +16,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.devices.DevicesGrid', { }, listeners: { - click: { + mousedown: { fn: 'onIconClicked', element: 'el', delegate: '.card-icon' @@ -51,7 +51,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.devices.DevicesGrid', { width: '96%' }] }, - + userCls: Ext.os.is.Desktop ? 'pbx-widget-grid big-820' : 'pbx-widget-grid small-100', plugins: [{ @@ -87,10 +87,12 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.devices.DevicesGrid', { xtype: 'textfield', required: true, hidden: true, + width: 250, emptyText: Ngcp.csc.locales.pbxconfig.enter_new_name[localStorage.getItem('languageSelected')], bind: { id: 'devices-textfield-name-{record.id}' }, + msgTarget: 'side', listeners: { // Workaround. Issue when binding is used, any change in any record field triggers a // layout break in the row which looks like row collapse, but is not @@ -129,6 +131,11 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.devices.DevicesGrid', { bind: { id: 'devices-textfield-mac-{record.id}' }, + msgTarget: 'side', + maxLength: 17, + enforceMaxLength: true, + regex: /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/, + regexText: Ngcp.csc.locales.pbxconfig.valid_mac_address[localStorage.getItem('languageSelected')], listeners: { focus: { fn: 'setFieldValue' @@ -320,8 +327,10 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.devices.DevicesGrid', { xtype: 'combo', editable: false, _skipSaveValidation: true, - store: ['User1', 'User2', 'User3', 'User4'], + store: 'Seats', name: 'seat', + displayField: 'name', + valueField: 'id', fieldLabel: 'User', allowBlank: false }, { diff --git a/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js b/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js index 59f046dc..40eb6dea 100644 --- a/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js +++ b/classic/src/view/pages/pbxconfig/groups/GroupsGrid.js @@ -11,7 +11,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.GroupsGrid', { }, listeners: { - click: { + mousedown: { fn: 'onIconClicked', element: 'el', delegate: 'div.card-icon' @@ -32,7 +32,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.GroupsGrid', { width: '96%' }] }, - + userCls: Ext.os.is.Desktop ? 'pbx-widget-grid big-820' : 'pbx-widget-grid small-100', plugins: [{ @@ -66,10 +66,12 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.GroupsGrid', { xtype: 'textfield', required: true, hidden: true, + width: 250, emptyText: Ngcp.csc.locales.pbxconfig.choose_one_or_more_groups[localStorage.getItem('languageSelected')], bind: { id: 'groups-textfield-name-{record.id}' }, + msgTarget: 'side', listeners: { focus: { fn: 'setFieldValue' @@ -106,6 +108,11 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.GroupsGrid', { bind: { id: 'groups-textfield-extension-{record.id}' }, + msgTarget: 'side', + maxLength: 3, + enforceMaxLength: true, + regex: /^[0-9]{3}$/, + regexText: Ngcp.csc.locales.pbxconfig.digit_extension_number[localStorage.getItem('languageSelected')], listeners: { focus: { fn: 'setFieldValue' @@ -188,6 +195,11 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.GroupsGrid', { required: true, hidden: true, emptyText: Ngcp.csc.locales.pbxconfig.enter_new_hunt_timeout[localStorage.getItem('languageSelected')], + msgTarget: 'side', + maxLength: 3, + enforceMaxLength: true, + regex: /^[0-9]{1,3}$/, + regexText: 'Must be a 3 digit timeout number', bind: { id: 'groups-textfield-hunt_timeout-{record.id}' }, diff --git a/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js b/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js index 085bd734..5764cfe1 100644 --- a/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js +++ b/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js @@ -12,7 +12,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.SeatsGrid', { }, listeners: { - click: { + mousedown: { fn: 'onIconClicked', element: 'el', delegate: 'div.card-icon' @@ -73,6 +73,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.SeatsGrid', { bind: { id: 'seats-textfield-name-{record.id}' }, + msgTarget: 'side', listeners: { focus: { fn: 'setFieldValue' @@ -110,6 +111,11 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.SeatsGrid', { bind: { id: 'seats-textfield-extension-{record.id}' }, + msgTarget: 'side', + maxLength: 3, + enforceMaxLength: true, + regex: /^[0-9]{3}$/, + regexText: Ngcp.csc.locales.pbxconfig.digit_extension_number[localStorage.getItem('languageSelected')], listeners: { focus: { fn: 'setFieldValue' @@ -218,10 +224,10 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.SeatsGrid', { } }, { xtype: 'tagfield', - valueField: 'group', - store: 'GroupNames', + valueField: 'id', + store: 'Groups', width: 250, - displayField: 'group', + displayField: 'name', hidden: true, emptyText: Ngcp.csc.locales.pbxconfig.choose_one_or_more_groups[localStorage.getItem('languageSelected')], bind: { diff --git a/resources/data/devices.json b/resources/data/devices.json index 524f2b97..f39f90ac 100644 --- a/resources/data/devices.json +++ b/resources/data/devices.json @@ -8,7 +8,7 @@ "extension2": "Ext1", "image": "/resources/images/cisco1.jpg", "seats": [{ - "name": "User1 (130)", + "name": 1, "type": "Shared", "order": 1, "position": { @@ -24,7 +24,7 @@ "anchor": "right" } }, { - "name": "User3", + "name": 3, "order": 3, "type": "Speed dial", "position": { @@ -33,7 +33,7 @@ "anchor": "right" } }, { - "name": "User4", + "name": 4, "order": 4, "type": "Shared", "position": { @@ -42,7 +42,7 @@ "anchor": "top" } }, { - "name": "User5", + "name": 5, "order": 5, "type": "Speed dial", "position": { @@ -51,7 +51,7 @@ "anchor": "top" } }, { - "name": "User6", + "name": 6, "order": 6, "type": "Busy lamp", "position": { @@ -69,7 +69,7 @@ "extension2": "Ext1", "image": "/resources/images/cisco2.jpg", "seats": [{ - "name": "User1", + "name": 1, "order": 1, "type": "Busy lamp", "position": { @@ -78,7 +78,7 @@ "anchor": "left" } }, { - "name": "User2", + "name": 2, "order": 2, "type": "Speed dial", "position": { @@ -87,7 +87,7 @@ "anchor": "left" } }, { - "name": "User3", + "name": 3, "order": 3, "type": "Shared", "position": { @@ -105,7 +105,7 @@ "extension2": "Ext1", "image": "/resources/images/cisco3.jpg", "seats": [{ - "name": "User1", + "name": 1, "order": 1, "type": "Busy lamp", "position": { @@ -114,7 +114,7 @@ "anchor": "top" } }, { - "name": "User2", + "name": 2, "order": 2, "type": "Shared", "position": { @@ -132,7 +132,7 @@ "extension2": "Ext1", "image": "/resources/images/cisco1.jpg", "seats": [{ - "name": "User1", + "name": 1, "type": "Shared", "order": 1, "position": { @@ -141,7 +141,7 @@ "anchor": "right" } }, { - "name": "User2", + "name": 2, "order": 2, "type": "Busy lamp", "position": { @@ -150,7 +150,7 @@ "anchor": "right" } }, { - "name": "User3", + "name": 3, "order": 3, "type": "Speed dial", "position": { @@ -159,7 +159,7 @@ "anchor": "right" } }, { - "name": "User4", + "name": 4, "order": 4, "type": "Shared", "position": { @@ -168,7 +168,7 @@ "anchor": "top" } }, { - "name": "User5", + "name": 5, "order": 5, "type": "Speed dial", "position": { @@ -177,7 +177,7 @@ "anchor": "top" } }, { - "name": "User6", + "name": 6, "order": 6, "type": "Busy lamp", "position": { diff --git a/resources/data/deviceslist.json b/resources/data/deviceslist.json index f42e318a..fc773dc2 100644 --- a/resources/data/deviceslist.json +++ b/resources/data/deviceslist.json @@ -4,7 +4,7 @@ "name": "Cisco Pbx 1", "image": "/resources/images/cisco1.jpg", "seats": [{ - "name": "User1", + "name": 1, "type": "Shared", "order": 1, "position": { @@ -13,7 +13,7 @@ "anchor": "right" } }, { - "name": "User2", + "name": 2, "order": 2, "type": "Busy lamp", "position": { @@ -22,7 +22,7 @@ "anchor": "right" } }, { - "name": "User3", + "name": 3, "order": 3, "type": "Speed dial", "position": { @@ -31,7 +31,7 @@ "anchor": "right" } }, { - "name": "User4", + "name": 4, "order": 4, "type": "Shared", "position": { @@ -40,7 +40,7 @@ "anchor": "top" } }, { - "name": "User5", + "name": 5, "order": 5, "type": "Speed dial", "position": { @@ -49,7 +49,7 @@ "anchor": "top" } }, { - "name": "User6", + "name": 6, "order": 6, "type": "Busy lamp", "position": { @@ -63,7 +63,7 @@ "name": "Cisco Pbx 2", "image": "/resources/images/cisco2.jpg", "seats": [{ - "name": "User1", + "name": 1, "order": 1, "type": "Busy lamp", "position": { @@ -72,7 +72,7 @@ "anchor": "left" } }, { - "name": "User2", + "name": 2, "order": 2, "type": "Speed dial", "position": { @@ -81,7 +81,7 @@ "anchor": "left" } }, { - "name": "User3", + "name": 3, "order": 3, "type": "Shared", "position": { @@ -95,7 +95,7 @@ "name": "Cisco Pbx 3", "image": "/resources/images/cisco3.jpg", "seats": [{ - "name": "User1", + "name": 1, "order": 1, "type": "Busy lamp", "position": { @@ -104,7 +104,7 @@ "anchor": "top" } }, { - "name": "User2", + "name": 2, "order": 2, "type": "Shared", "position": { diff --git a/resources/data/groups.json b/resources/data/groups.json index 94f2128d..81f71124 100644 --- a/resources/data/groups.json +++ b/resources/data/groups.json @@ -7,19 +7,19 @@ "hunt_timeout": "60" },{ "id" : 2, - "name":"Development", + "name": "Development", "extension": "301", "hunt_policy": "Parallel", "hunt_timeout": "320" }, { "id" : 3, - "name":"Sales", + "name": "Sales", "extension": "401", "hunt_policy": "Sequential", "hunt_timeout": "10" }, { "id" : 4, - "name":"Operations", + "name": "Operations", "extension": "601", "hunt_policy": "Serial", "hunt_timeout": "40" diff --git a/resources/data/seats.json b/resources/data/seats.json index b03ebca4..59a838a0 100644 --- a/resources/data/seats.json +++ b/resources/data/seats.json @@ -5,83 +5,83 @@ "extension": "202", "primary_number": "43991001", "alias_numbers": ["012341", "012342"], - "groups": ["Marketing", "Sales"] + "groups": [1, 3] }, { "id": 2, "name": "Seat2", "extension": "402", "primary_number": "43991019", "alias_numbers": ["012343", "012344", "012345"], - "groups": ["Marketing", "Operations", "Sales"] + "groups": [1, 4, 3] }, { "id": 3, "name": "Seat3", "extension": "302", "primary_number": "43991021", "alias_numbers": ["012346"], - "groups": ["Marketing"] + "groups": [1] }, { "id": 4, "name": "Seat4", "extension": "602", "primary_number": "43991008", "alias_numbers": ["012347", "012348"], - "groups": ["Marketing", "Sales"] + "groups": [1, 3] }, { "id": 5, "name": "Seat5", "extension": "303", "primary_number": "43991005", "alias_numbers": ["012349"], - "groups": ["Marketing", "Sales"] + "groups": [1, 3] }, { "id": 6, "name": "Seat6", "extension": "603", "primary_number": "43991020", "alias_numbers": ["012350", "012351", "012352", "012353"], - "groups": ["Development", "Operations"] + "groups": [2, 4] }, { "id": 7, "name": "Seat7", "extension": "403", "primary_number": "43991016", "alias_numbers": ["012354"], - "groups": ["Development", "Operations"] + "groups": [2, 4] }, { "id": 8, "name": "Seat8", "extension": "304", "primary_number": "43991013", "alias_numbers": ["012355"], - "groups": ["Development", "Operations"] + "groups": [2, 4] }, { "id": 9, "name": "Seat9", "extension": "203", "primary_number": "43991023", "alias_numbers": ["012356"], - "groups": ["Sales"] + "groups": [3] }, { "id": 10, "name": "Seat10", "extension": "305", "primary_number": "43991004", "alias_numbers": ["012357", "012358"], - "groups": ["Sales"] + "groups": [3] }, { "id": 11, "name": "Seat11", "extension": "204", "primary_number": "43991011", "alias_numbers": ["012359", "012360", "012361"], - "groups": ["Sales"] + "groups": [3] }, { "id": 12, "name": "Seat12", "extension": "404", "primary_number": "43991018", "alias_numbers": ["012362"], - "groups": ["Marketing"] + "groups": [1] }] }