diff --git a/src/api/call-forward.js b/src/api/call-forward.js index 3f971e1e..0e6f579d 100644 --- a/src/api/call-forward.js +++ b/src/api/call-forward.js @@ -542,3 +542,148 @@ export function deleteTimesetById(id) { }); }); } + +export function resetTimesetByName(options) { + return new Promise((resolve, reject)=> { + Promise.resolve().then(() => { + return getTimesets(options.id); + }).then((timesets) => { + let deleteTimesetPromises = []; + _.filter(timesets, { 'name': options.name }).forEach((timeset) => { + deleteTimesetPromises.push(deleteTimesetById(timeset.id)); + }); + return Promise.all(deleteTimesetPromises); + }).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }); +} + +export function addTimeToTimeset(options) { + let headers = { + 'Content-Type': 'application/json-patch+json' + }; + return new Promise((resolve, reject) => { + Vue.http.patch('/api/cftimesets/' + options.id, [{ + op: 'replace', + path: '/times', + value: options.time + }], { headers: headers }).then(() => { + resolve(); + }).catch(err => { + reject(err); + }); + }); +} + +export function addNewTimeset(timesetName) { + return new Promise((resolve, reject) => { + Vue.http.post('/api/cftimesets/', { name: timesetName }) + .then(response => { + resolve(_.last(_.split(response.headers.get('Location'), '/'))); + }).catch(err => { + reject(err); + }); + }); +} + +export function convertAddTime(options) { + let time = options.time; + let weekday = options.weekday; + let convertedTime = []; + let fromHour = time.from.split(':')[0]; + let toHour = time.to.split(':')[0]; + let fromMinute = time.from.split(':')[1]; + let toMinute = time.to.split(':')[1]; + let bothHasFullHour = fromMinute === '00' && toMinute === '00'; + let bothHasSameHour = fromHour === toHour; + let fromMinuteNotZero = time.from.split(':')[1] !== '00'; + let toMinuteNotZero = time.to.split(':')[1] !== '00'; + let bothMinutesNotZeroAndNextHourPlusOne = fromMinuteNotZero && toMinuteNotZero && parseInt(toHour) === parseInt(fromHour) + 1; + let bothMinutesNotZero = time.from.split(':')[1] !== '00' && + time.to.split(':')[1] !== '00'; + let startNotZeroAndEndNextFullHour = + (parseInt(fromHour) === (parseInt(toHour) - 1) && toMinute === '00'); + if (bothHasFullHour) { + convertedTime.push({ wday: weekday, hour: `${parseInt(fromHour)}-${parseInt(toHour)-1}` }); + } + else if (bothHasSameHour) { + convertedTime.push({ wday: weekday, hour: `${parseInt(fromHour)}`, minute: `${parseInt(fromMinute)}-${parseInt(toMinute)-1}`}); + } + else if (startNotZeroAndEndNextFullHour) { + convertedTime.push({ wday: weekday, hour: `${parseInt(fromHour)}`, minute: `${parseInt(fromMinute)}-59` }); + } + else if (bothMinutesNotZeroAndNextHourPlusOne) { + convertedTime.push( + { wday: weekday, hour: `${parseInt(fromHour)}`, minute: `${parseInt(fromMinute)}-59` }, + { wday: weekday, hour: `${parseInt(toHour)}`, minute: `0-${parseInt(toMinute)-1}` } + ); + } + else if (bothMinutesNotZero) { + convertedTime.push( + { wday: weekday, hour: `${parseInt(fromHour)}`, minute: `${parseInt(fromMinute)}-59` }, + { wday: weekday, hour: `${parseInt(fromHour)+1}-${parseInt(toHour)-1}` }, + { wday: weekday, hour: `${parseInt(toHour)}`, minute: `0-${parseInt(toMinute)-1}` } + ); + } + // From minute not zero and to minute zero + else if (fromMinuteNotZero) { + convertedTime.push( + { wday: weekday, hour: `${parseInt(fromHour)}`, minute: `${parseInt(fromMinute)}-59` }, + { wday: weekday, hour: `${parseInt(fromHour)+1}-${parseInt(toHour)-1}` } + ); + } + // From minute zero and to minute not zero + else if (toMinuteNotZero) { + convertedTime.push( + { wday: weekday, hour: `${parseInt(fromHour)+1}-${parseInt(toHour)-1}` }, + { wday: weekday, hour: `${parseInt(toHour)}`, minute: `0-${parseInt(toMinute)-1}` } + ); + } + return convertedTime; +} + +export function createTimesetWithTime(options) { + let convertedTime = convertAddTime({ time: options.time[0], weekday: options.weekday }); + return new Promise((resolve, reject)=> { + Promise.resolve().then(() => { + return addNewTimeset(options.name); + }).then((timesetId) => { + return addTimeToTimeset({ id: timesetId, time: convertedTime }); + }).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }); +} + +export function getTimesByTimesetId(id) { + return new Promise((resolve, reject)=>{ + Vue.http.get('/api/cftimesets/' + id).then((res)=>{ + let timeset = getJsonBody(res.body); + delete timeset['_links']; + resolve(timeset.times); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function appendTimeToTimeset(options) { + let convertedTime = convertAddTime({ time: options.time[0], weekday: options.weekday }); + return new Promise((resolve, reject)=> { + Promise.resolve().then(() => { + return getTimesByTimesetId(options.id); + }).then((times) => { + let concatTimes = times.concat(convertedTime); + return addTimeToTimeset({ id: options.id, time: concatTimes }); + }).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }); +} diff --git a/src/components/pages/CallForward/CompanyHours.vue b/src/components/pages/CallForward/CompanyHours.vue index 5c548f4e..f5f22cfe 100644 --- a/src/components/pages/CallForward/CompanyHours.vue +++ b/src/components/pages/CallForward/CompanyHours.vue @@ -1,64 +1,72 @@ diff --git a/src/components/pages/CallForward/CscAddDestinationForm.vue b/src/components/pages/CallForward/CscAddDestinationForm.vue index 7b037311..defbe902 100644 --- a/src/components/pages/CallForward/CscAddDestinationForm.vue +++ b/src/components/pages/CallForward/CscAddDestinationForm.vue @@ -117,11 +117,11 @@ enableForm(type) { let lastDestination = _.findLast(this.destinations) || {}; this.formEnabled = true; - this.$store.dispatch('callForward/setFormType', type); - this.$store.dispatch('callForward/setActiveForm', this.groupName); - this.$store.dispatch('callForward/setDestinationsetId', this.id); - this.$store.dispatch('callForward/setGroupName', this.groupName); - this.$store.dispatch('callForward/setPriority', lastDestination.priority || 1); + this.$store.commit('callForward/setFormType', type); + this.$store.commit('callForward/setActiveForm', this.groupName); + this.$store.commit('callForward/setDestinationsetId', this.id); + this.$store.commit('callForward/setGroupName', this.groupName); + this.$store.commit('callForward/setPriority', lastDestination.priority || 1); if (type === 'voicebox') { this.destinationForm.destination = 'Voicemail'; } @@ -136,8 +136,8 @@ this.destinationForm.timeout = 300; this.destinationForm.destination = ''; this.formEnabled = false; - this.$store.dispatch('callForward/resetFormState'); - this.$store.dispatch('callForward/resetDestinationState'); + this.$store.commit('callForward/resetFormState'); + this.$store.commit('callForward/resetDestinationState'); }, addDestination() { startLoading(); diff --git a/src/components/pages/CallForward/CscAddTimeForm.vue b/src/components/pages/CallForward/CscAddTimeForm.vue new file mode 100644 index 00000000..931aa504 --- /dev/null +++ b/src/components/pages/CallForward/CscAddTimeForm.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/components/pages/CallForward/CscCallForwardDestinations.vue b/src/components/pages/CallForward/CscCallForwardDestinations.vue index 82ef466b..2d98fd68 100644 --- a/src/components/pages/CallForward/CscCallForwardDestinations.vue +++ b/src/components/pages/CallForward/CscCallForwardDestinations.vue @@ -4,20 +4,17 @@ :group="destinations.online" group-name="cfu" :timeset="timeset" - icon="signal_wifi_4_bar"> - + icon="signal_wifi_4_bar" /> - + icon="record_voice_over" /> - + icon="signal_wifi_off" /> diff --git a/src/components/pages/CallForward/CscCallForwardTime.vue b/src/components/pages/CallForward/CscCallForwardTime.vue index 573640e4..d0028882 100644 --- a/src/components/pages/CallForward/CscCallForwardTime.vue +++ b/src/components/pages/CallForward/CscCallForwardTime.vue @@ -1,5 +1,5 @@