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]
}]
}