TT#21848 Ngcp CSC - CallForwarding - Timeset/Timeperiod Creation

Change-Id: Icf5ac61c708dbe91e6d50213377aae5a3cbecfd0
changes/85/15585/9
Carlo 8 years ago
parent 5f3ed3fb93
commit d6091d9c34

@ -777,6 +777,13 @@ Ext.define('Ngcp.csc.locales', {
fr: 'CALL FORWARD', fr: 'CALL FORWARD',
sp: 'CALL FORWARD' sp: 'CALL FORWARD'
}, },
add_new_period: {
en: 'ADD NEW PERIOD',
it: 'ADD NEW PERIOD',
de: 'ADD NEW PERIOD',
fr: 'ADD NEW PERIOD',
sp: 'ADD NEW PERIOD'
},
time_one: { time_one: {
en: 'Always', en: 'Always',
it: 'Always', it: 'Always',

@ -49,7 +49,7 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
return mday || minute || month || year; return mday || minute || month || year;
}, },
parseTimesetApiToRecords: function(times, timesetName) { parseTimesetApiToRecords: function(times, timesetName, timesetId) {
var retData = []; var retData = [];
var me = this; var me = this;
var vm = me.getViewModel(); var vm = me.getViewModel();
@ -63,14 +63,17 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
7: 'Saturday' 7: 'Saturday'
}; };
Ext.each(times, function(timeSlot) { Ext.each(times, function(timeSlot) {
var days = timeSlot.wday.split('-'); var days, fromHour, toHour;
var fromHour = timeSlot.hour ? parseInt(timeSlot.hour.split('-')[0]) : null;
var toHour = timeSlot.hour ? parseInt(timeSlot.hour.split('-')[1]) : null;
var checkIncompatibleTimeset = me.checkIncompatibleTimeset(timeSlot); var checkIncompatibleTimeset = me.checkIncompatibleTimeset(timeSlot);
if (checkIncompatibleTimeset) { if (checkIncompatibleTimeset || !timeSlot.wday || !timeSlot.hour) {
vm.set(me.getTimesetPrexifFromName(timesetName) + '_add_text', '<div class="cf-invalid-period-box">' + Ngcp.csc.locales.callforward.invalid_times[localStorage.getItem('languageSelected')] + '</div>'); vm.set(me.getTimesetPrexifFromName(timesetName) + '_add_text', '<div class="cf-invalid-period-box">' + Ngcp.csc.locales.callforward.invalid_times[localStorage.getItem('languageSelected')] + '</div>');
vm.set(me.getTimesetPrexifFromName(timesetName) + '_is_invalid', timesetId);
return; return;
} }
days = timeSlot.wday.split('-');
fromHour = timeSlot.hour ? parseInt(timeSlot.hour.split('-')[0]) : null;
toHour = timeSlot.hour ? parseInt(timeSlot.hour.split('-')[1]) : null;
if (days.length > 1) { if (days.length > 1) {
var fromDay = parseInt(days[0]); var fromDay = parseInt(days[0]);
var toDay = parseInt(days[1]); var toDay = parseInt(days[1]);
@ -136,7 +139,7 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
var timesetId = timeset.id; var timesetId = timeset.id;
store._timesetId = timeset.id; store._timesetId = timeset.id;
if (/(After|Company)\s(Hours)/.test(timesetName)) { if (/(After|Company)\s(Hours)/.test(timesetName)) {
var times = me.parseTimesetApiToRecords(timeset.times, timesetName); var times = me.parseTimesetApiToRecords(timeset.times, timesetName, timeset.id);
Ext.each(times, function(time) { Ext.each(times, function(time) {
var cfModel = Ext.create('NgcpCsc.model.CallForwardDestination', { var cfModel = Ext.create('NgcpCsc.model.CallForwardDestination', {
id: Ext.id(), id: Ext.id(),
@ -147,18 +150,18 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
day: time.day day: time.day
}); });
arrayOfModels.push(cfModel); arrayOfModels.push(cfModel);
me.setVmToTrue(timesetName, true); me.setVm(timesetName, true);
}); });
}; };
}); });
if (arrayOfModels.length > 0) { if (arrayOfModels.length > 0) {
me.populateTimesetStores(arrayOfModels); me.populateTimesetStores(arrayOfModels);
} else { } else {
me.setVmToTrue(me.getTimesetFromRoute(currentRoute), false); me.setVm(me.getTimesetFromRoute(currentRoute), false);
} }
}, },
setVmToTrue: function(name, exists) { setVm: function(name, exists) {
var vm = this.getViewModel(); var vm = this.getViewModel();
switch (name) { switch (name) {
case 'After Hours': case 'After Hours':
@ -502,6 +505,51 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
}); });
return false; return false;
}, },
createTimesetReq: function(timesetName, subscriberId, store) {
var me = this;
Ext.Ajax.request({
url: '/api/cftimesets/',
method: 'POST',
jsonData: {
name: timesetName,
subscriber_id: subscriberId,
times: [{
wday: '1',
hour: '0'
}] // we need to create a default valid period
},
success: function(response, opts) {
store.load();
}
});
},
createTimeset: function() {
var vm = this.getViewModel();
var me = this;
var currentRoute = window.location.hash;
var timesetName = me.getTimesetFromRoute(currentRoute);
var subscriberId = localStorage.getItem('subscriber_id');
var store = Ext.getStore(me.getModuleFromRoute() + '-Timeset');
switch (true) {
case !!vm.get(me.getTimesetPrexifFromName(timesetName) + '_is_invalid'):
// if timeset is invalid it's deleted and recreated with the same name
Ext.Ajax.request({
url: '/api/cftimesets/' + vm.get(me.getTimesetPrexifFromName(timesetName) + '_is_invalid'),
method: 'DELETE',
success: function(response, opts) {
vm.set(me.getTimesetPrexifFromName(timesetName) + '_is_invalid', null);
me.createTimesetReq(timesetName, subscriberId, store);
}
});
break;
case !vm.get(me.getTimesetPrexifFromName(timesetName) + '_exists_in_api'):
me.createTimesetReq(timesetName, subscriberId, store);
break
default:
me.setVm(timesetName, true);
}
},
cfTimesetBeforeSync: function(store, options) { cfTimesetBeforeSync: function(store, options) {
var me = this; var me = this;
@ -522,12 +570,18 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
var nextRec = store.getRange()[index + 1]; var nextRec = store.getRange()[index + 1];
var timeFrom = Ext.isDate(rec.get('time_from')) ? new Date(rec.get('time_from')).getHours() : rec.get('time_from'); var timeFrom = Ext.isDate(rec.get('time_from')) ? new Date(rec.get('time_from')).getHours() : rec.get('time_from');
var timeTo = Ext.isDate(rec.get('time_to')) ? new Date(rec.get('time_to')).getHours() : rec.get('time_to'); var timeTo = Ext.isDate(rec.get('time_to')) ? new Date(rec.get('time_to')).getHours() : rec.get('time_to');
var nextRecTimeFrom = nextRec ? Ext.isDate(nextRec.get('time_from')) ? new Date(nextRec.get('time_from')).getHours() : nextRec.get('time_from') : null; var nextRecTimeFrom = nextRec ? Ext.isDate(nextRec.get('time_from')) ? new Date(nextRec.get('time_from')).getHours() : nextRec.get('time_from') : null;
var nextRecTimeTo = nextRec ? Ext.isDate(nextRec.get('time_to')) ? new Date(nextRec.get('time_to')).getHours() : nextRec.get('time_to') : null; var nextRecTimeTo = nextRec ? Ext.isDate(nextRec.get('time_to')) ? new Date(nextRec.get('time_to')).getHours() : nextRec.get('time_to') : null;
if (!nextRec || daysMapping[nextRec.get('day')] > (daysMapping[rec.get('day')] +1) || timeFrom.toString() !== nextRecTimeFrom.toString() || timeTo.toString() !== nextRecTimeTo.toString()) { if (!rec.get('day')) { // periods wit no day are not going to be saved
return;
} else if (!nextRec || !nextRec.get('day') || daysMapping[nextRec.get('day')] > (daysMapping[rec.get('day')] + 1) || (timeFrom && nextRecTimeFrom && (timeFrom.toString() !== nextRecTimeFrom.toString() || timeTo.toString() !== nextRecTimeTo.toString()))) {
times.push({ times.push({
wday: (multiDayPeriod ? multiDayPeriod + '-' + daysMapping[rec.get('day')] : daysMapping[rec.get('day')]).toString(), wday: (multiDayPeriod ? multiDayPeriod + '-' + daysMapping[rec.get('day')] : daysMapping[rec.get('day')]).toString(),
hour: timeFrom.toString() + '-' + timeTo.toString() hour: timeFrom ? timeTo ? timeFrom.toString() + '-' + timeTo.toString() : timeFrom.toString() : null
// this above allows saving empty hours (from/to), following the current behaviour of ngcp panel and API.
// But in current implementation of CSC, saving a period wich has no time_from cause the timeset to be invalid.
// I guess this requires a clarification with backend to understand if it's a missing validation in the API or a feature,
// and we can then adjust the UI accordingly.
}); });
multiDayPeriod = null; multiDayPeriod = null;
} else { } else {
@ -1311,29 +1365,6 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
}; };
}, },
createNewStandardSet: function(url, name, subscriberId) {
var vm = this.getViewModel();
Ext.Ajax.request({
url: url,
method: 'POST',
jsonData: {
name: name,
subscriber_id: subscriberId
},
success: function(response, opts) {
switch (name) {
case 'After Hours':
vm.set('after_hours_exists_in_api', true);
break;
case 'Company Hours':
vm.set('company_hours_exists_in_api', true);
break;
}
}
});
},
createNewMapping: function(subscriberId, newType, newDestinationsetName, newSourceset, newTimeset) { createNewMapping: function(subscriberId, newType, newDestinationsetName, newSourceset, newTimeset) {
Ext.Ajax.request({ Ext.Ajax.request({
url: '/api/cfmappings/' + localStorage.getItem('subscriber_id'), url: '/api/cfmappings/' + localStorage.getItem('subscriber_id'),
@ -1485,6 +1516,12 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardController', {
var store = grid.getStore() var store = grid.getStore()
var rec = store.getAt(rowIndex); var rec = store.getAt(rowIndex);
store.remove(rec); store.remove(rec);
},
addNewPeriod: function(btn) {
var grid = btn.up('[name=timesetCont]').down('grid');
var store = grid.getStore();
var newModel = Ext.create('NgcpCsc.model.CallForwardTimeset');
store.add(newModel);
} }
}); });

@ -16,16 +16,28 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardTimesetGrid', {
items: [{ items: [{
text: Ngcp.csc.locales.common.day[localStorage.getItem('languageSelected')], text: Ngcp.csc.locales.common.day[localStorage.getItem('languageSelected')],
dataIndex: 'day', dataIndex: 'day',
flex: 1 xtype: 'widgetcolumn',
editable: true,
flex: 1,
widget: {
xtype: 'combo',
editable: false,
margin: '8 0 0 0',
bind: {
value: '{record.day}'
},
store: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
}
}, { }, {
text: Ngcp.csc.locales.common.from[localStorage.getItem('languageSelected')], text: Ngcp.csc.locales.common.from[localStorage.getItem('languageSelected')],
dataIndex: 'time_from', dataIndex: 'time_from',
xtype: 'widgetcolumn', xtype: 'widgetcolumn',
editable: false,
flex: 1, flex: 1,
widget: { widget: {
xtype: 'timefield', xtype: 'timefield',
editable: false,
margin: '8 0 0 0', margin: '8 0 0 0',
increment: 60,
tooltip: Ngcp.csc.locales.callforward.tooltips.change_time_from[localStorage.getItem('languageSelected')], tooltip: Ngcp.csc.locales.callforward.tooltips.change_time_from[localStorage.getItem('languageSelected')],
bind: { bind: {
value: '{record.time_from}' value: '{record.time_from}'
@ -39,7 +51,9 @@ Ext.define('NgcpCsc.view.pages.callforward.CallForwardTimesetGrid', {
flex: 1, flex: 1,
widget: { widget: {
xtype: 'timefield', xtype: 'timefield',
editable: false,
margin: '8 0 0 0', margin: '8 0 0 0',
increment: 60,
tooltip: Ngcp.csc.locales.callforward.tooltips.change_time_to[localStorage.getItem('languageSelected')], tooltip: Ngcp.csc.locales.callforward.tooltips.change_time_to[localStorage.getItem('languageSelected')],
bind: { bind: {
value: '{record.time_to}' value: '{record.time_to}'

@ -35,7 +35,8 @@ Ext.define('NgcpCsc.view.pages.callforward.afterhours.Afterhours', {
xtype: 'container', xtype: 'container',
items: [{ items: [{
xtype: 'panel', xtype: 'panel',
id: 'collapsePanel-afterHours', name: 'timesetCont',
id: 'collapsePanel-afterhours',
title: Ngcp.csc.locales.callforward.for_calls_during_after_hours[localStorage.getItem('languageSelected')], title: Ngcp.csc.locales.callforward.for_calls_during_after_hours[localStorage.getItem('languageSelected')],
width: '100%', width: '100%',
collapsible: true, collapsible: true,
@ -65,23 +66,38 @@ Ext.define('NgcpCsc.view.pages.callforward.afterhours.Afterhours', {
},{ },{
flex: 1, flex: 1,
xtype: 'button', xtype: 'button',
handler: 'createTimeset',
text: Ngcp.csc.locales.common.create[localStorage.getItem('languageSelected')] text: Ngcp.csc.locales.common.create[localStorage.getItem('languageSelected')]
}] }]
}] }]
}, },
callForwardAfterGrid, { callForwardAfterGrid, {
text: Ngcp.csc.locales.common.save_caps[localStorage.getItem('languageSelected')], margin: '10 0 10 0',
xtype: 'button', layout: 'hbox',
cls: 'x-btn-left', width: '100%',
id: 'afterhours-saveButton',
width: 135,
margin: '10 0 10 623',
listeners: {
click: 'saveTimesetGrid'
},
bind: { bind: {
hidden: '{!after_hours_exists_in_api}' hidden: '{!after_hours_exists_in_api}'
} },
items: [{
flex: 6
},{
flex: 2,
margin: '0 5 0 0',
text: Ngcp.csc.locales.callforward.add_new_period[localStorage.getItem('languageSelected')],
xtype: 'button',
id: 'afterhours-addNewPeriodButton',
listeners: {
click: 'addNewPeriod'
}
}, {
text: Ngcp.csc.locales.common.save_caps[localStorage.getItem('languageSelected')],
xtype: 'button',
cls: 'x-btn-left',
id: 'afterhours-saveButton',
listeners: {
click: 'saveTimesetGrid'
}
}]
} }
] ]
}] }]

@ -35,7 +35,8 @@ Ext.define('NgcpCsc.view.pages.callforward.companyhours.Companyhours', {
xtype: 'container', xtype: 'container',
items: [{ items: [{
xtype: 'panel', xtype: 'panel',
id: 'collapsePanel-companyHours', name: 'timesetCont',
id: 'collapsePanel-companyhours',
title: Ngcp.csc.locales.callforward.for_calls_during_company_hours[localStorage.getItem('languageSelected')], title: Ngcp.csc.locales.callforward.for_calls_during_company_hours[localStorage.getItem('languageSelected')],
width: '100%', width: '100%',
collapsible: true, collapsible: true,
@ -65,23 +66,38 @@ Ext.define('NgcpCsc.view.pages.callforward.companyhours.Companyhours', {
},{ },{
flex: 1, flex: 1,
xtype: 'button', xtype: 'button',
handler: 'createTimeset',
text: Ngcp.csc.locales.common.create[localStorage.getItem('languageSelected')] text: Ngcp.csc.locales.common.create[localStorage.getItem('languageSelected')]
}] }]
}] }]
}, },
callForwardCompanyGrid, { callForwardCompanyGrid, {
text: Ngcp.csc.locales.common.save_caps[localStorage.getItem('languageSelected')], margin: '10 0 10 0',
xtype: 'button', layout: 'hbox',
id: 'companyhours-saveButton', width: '100%',
cls: 'x-btn-left',
width: 135,
margin: '10 0 10 585',
listeners: {
click: 'saveTimesetGrid'
},
bind: { bind: {
hidden: '{!company_hours_exists_in_api}' hidden: '{!company_hours_exists_in_api}'
} },
items: [{
flex: 6
},{
flex: 2,
margin: '0 5 0 0',
text: Ngcp.csc.locales.callforward.add_new_period[localStorage.getItem('languageSelected')],
xtype: 'button',
id: 'companyhours-addNewPeriodButton',
listeners: {
click: 'addNewPeriod'
}
}, {
flex: 1,
text: Ngcp.csc.locales.common.save_caps[localStorage.getItem('languageSelected')],
xtype: 'button',
id: 'companyhours-saveButton',
listeners: {
click: 'saveTimesetGrid'
}
}]
} }
] ]
}] }]

Loading…
Cancel
Save