diff --git a/src/api/call-forward.js b/src/api/call-forward.js index 150205d3..1ff7ad75 100644 --- a/src/api/call-forward.js +++ b/src/api/call-forward.js @@ -380,8 +380,8 @@ export function moveDestinationDown(options) { } export function getDaysFromRange(options) { - let fromDay = options.from; - let toDay = options.to; + let fromDay = options.fromDay; + let toDay = options.toDay + 1; let wdayMap = { 1: i18n.t('pages.callForward.times.sunday'), 2: i18n.t('pages.callForward.times.monday'), @@ -393,29 +393,31 @@ export function getDaysFromRange(options) { }; let days = []; while (fromDay < toDay) { - days.push({ name: wdayMap[fromDay], number: fromDay }); + days.push({ name: wdayMap[fromDay], number: fromDay.toString() }); fromDay++; }; return days; } export function getHoursFromRange(options) { + let toHour = options.toHour + 1; let fromMinute = options.hasMinute ? options.fromMinute : '00'; let toMinute = options.hasMinute ? options.toMinute + 1 : '00'; toMinute = !toMinute ? fromMinute + 1 : toMinute; let hours = []; if (options.hasMinute) { - while (options.fromHour < options.toHour) { + while (options.fromHour < toHour) { hours.push({ from: `${options.fromHour}:${fromMinute}`, - to: `${options.fromHour}:${toMinute}` + to: `${options.fromHour}:${toMinute}`, + hour: options.fromHour.toString() }); options.fromHour++; }; } else { hours.push({ from: `${options.fromHour}:${fromMinute}`, - to: `${options.toHour}:${toMinute}` + to: `${toHour}:${toMinute}` }); } return hours; @@ -424,48 +426,54 @@ export function getHoursFromRange(options) { export function convertTimesetToWeekdays(options) { let times = []; let counter = 0; - let timesetIsCompatible = false; + let timesetIsCompatible = true; let timesetHasDuplicate = false; let timesetExists = false; let timesetHasReverse = false; + let timesetId = null; options.timesets.forEach((timeset) => { let timesetNameMatches = timeset.name === options.timesetName; if (counter === 0 && timesetNameMatches) { timeset.times.forEach((time) => { - let days = []; - let hours = []; - let fromDay = parseInt(time.wday.split('-')[0]); - let toDay = time.wday.split('-')[1] ? parseInt(time.wday.split('-')[1]) + 1 : fromDay + 1; - let fromHour = parseInt(time.hour.split('-')[0]); - let toHour = time.hour.split('-')[1] ? parseInt(time.hour.split('-')[1]) + 1 : fromHour + 1; - let fromMinute = time.minute ? parseInt(time.minute.split('-')[0]) : undefined; - let toMinute = (time.minute && time.minute.split('-')[1]) ? parseInt(time.minute.split('-')[1]) : undefined; - let isCompatible = time.mday || time.month || time.year || !time.wday || !time.hour; - let isReverse = fromDay > toDay || fromHour > toHour || fromMinute > toMinute; - if (isCompatible) { + let isIncompatible = time.mday || time.month || time.year || !time.wday || !time.hour; + if (isIncompatible) { timesetIsCompatible = false; return; - } else if (isReverse) { - timesetHasReverse = true; - return; - } else { - hours = getHoursFromRange({ hasMinute: !!time.minute, - fromHour: fromHour, toHour: toHour, - fromMinute: fromMinute, toMinute: toMinute }); - days = getDaysFromRange({ from: fromDay, to: toDay }); - days.forEach(day => { - hours.forEach(hour => { - times.push({ - weekday: day.name, - from: hour.from, - to: hour.to, - wday: time.wday, - hour: time.hour, - minute: time.minute + } else { + let days = []; + let hours = []; + let fromDay = parseInt(time.wday.split('-')[0]); + let toDay = time.wday.split('-')[1] ? parseInt(time.wday.split('-')[1]) : fromDay; + let fromHour = parseInt(time.hour.split('-')[0]); + let toHour = time.hour.split('-')[1] ? parseInt(time.hour.split('-')[1]) : fromHour; + let fromMinute = time.minute ? parseInt(time.minute.split('-')[0]) : undefined; + let toMinute = (time.minute && time.minute.split('-')[1]) ? parseInt(time.minute.split('-')[1]) : undefined; + let isReverse = fromDay > toDay || fromHour > toHour || fromMinute > toMinute; + let timesHour; + if (isReverse) { + timesetHasReverse = true; + return; + } else { + hours = getHoursFromRange({ hasMinute: !!time.minute, + fromHour: fromHour, toHour: toHour, + fromMinute: fromMinute, toMinute: toMinute }); + days = getDaysFromRange({ fromDay: fromDay, toDay: toDay }); + days.forEach(day => { + hours.forEach(hour => { + timesHour = time.minute ? hour.hour : time.hour; + times.push({ + weekday: day.name, + from: hour.from, + to: hour.to, + wday: day.number, + hour: timesHour, + minute: time.minute + }); }); }); - }); - timesetIsCompatible = true; + timesetId = timeset.id; + timesetIsCompatible = true; + } } }); timesetExists = true; @@ -480,7 +488,8 @@ export function convertTimesetToWeekdays(options) { timesetIsCompatible: timesetIsCompatible, timesetExists: timesetExists, timesetHasReverse: timesetHasReverse, - timesetHasDuplicate: timesetHasDuplicate + timesetHasDuplicate: timesetHasDuplicate, + timesetId: timesetId }; } @@ -498,3 +507,30 @@ export function loadTimesetTimes(options) { }); }); } + +export function deleteTimeFromTimeset(options) { + let headers = { + 'Content-Type': 'application/json-patch+json' + }; + return new Promise((resolve, reject) => { + Vue.http.patch('/api/cftimesets/' + options.timesetId, [{ + op: 'replace', + path: '/times', + value: options.times + }], { headers: headers }).then((result) => { + resolve(result); + }).catch(err => { + reject(err); + }); + }); +} + +export function deleteTimesetById(id) { + return new Promise((resolve, reject) => { + Vue.http.delete('/api/cftimesets/' + id).then(() => { + resolve(); + }).catch(err => { + reject(err); + }); + }); +} diff --git a/src/components/pages/CallForward/Always.vue b/src/components/pages/CallForward/Always.vue index 12cdafa4..e3904c09 100644 --- a/src/components/pages/CallForward/Always.vue +++ b/src/components/pages/CallForward/Always.vue @@ -1,6 +1,6 @@ @@ -23,7 +23,10 @@ computed: { ...mapState('callForward', [ 'destinations' - ]) + ]), + alwaysTimeset() { + return null; + } } } diff --git a/src/components/pages/CallForward/CompanyHours.vue b/src/components/pages/CallForward/CompanyHours.vue index 7038c27b..50725842 100644 --- a/src/components/pages/CallForward/CompanyHours.vue +++ b/src/components/pages/CallForward/CompanyHours.vue @@ -5,31 +5,31 @@ -
+
- {{ $t('pages.callForward.times.companyHoursReverse') }} + {{ $t('pages.callForward.times.companyHoursDuplicate') }}
-
+
- {{ $t('pages.callForward.times.companyHoursDuplicate') }} + {{ $t('pages.callForward.times.companyHoursIncompatible') }}
-
+
- {{ $t('pages.callForward.times.companyHoursIncompatible') }} + {{ $t('pages.callForward.times.companyHoursReverse') }}
diff --git a/src/components/pages/CallForward/CscCallForwardDestinations.vue b/src/components/pages/CallForward/CscCallForwardDestinations.vue index 6256791e..ace1fadf 100644 --- a/src/components/pages/CallForward/CscCallForwardDestinations.vue +++ b/src/components/pages/CallForward/CscCallForwardDestinations.vue @@ -23,7 +23,7 @@ diff --git a/src/components/pages/CallForward/CscCallForwardTimes.vue b/src/components/pages/CallForward/CscCallForwardTimes.vue index 76c2723c..7d9cc9f4 100644 --- a/src/components/pages/CallForward/CscCallForwardTimes.vue +++ b/src/components/pages/CallForward/CscCallForwardTimes.vue @@ -4,12 +4,7 @@ Times -
-

{{ $t('pages.callForward.times.weekday') }}

-

{{ $t('pages.callForward.times.from') }}

-

{{ $t('pages.callForward.times.to') }} -

- +
@@ -26,13 +21,13 @@