diff --git a/src/api/pbx-seats.js b/src/api/pbx-seats.js index f332c62c..f265c31d 100644 --- a/src/api/pbx-seats.js +++ b/src/api/pbx-seats.js @@ -2,7 +2,8 @@ import { createSubscriber, deleteSubscriber, getFullSubscribers, - getSubscriberAndPreferences, getSubscribers, + getSubscriberAndPreferences, + getSubscribers, setDisplayName, setPbxExtension, setPbxWebPassword, @@ -10,6 +11,7 @@ import { setSubscriberNumbers, setPreferenceIntraPbx, setPreferenceMusicOnHold, + setPreferenceCli, getPreferences, setPbxSIPPassword } from './subscriber' @@ -110,7 +112,8 @@ export function getSeatList (options) { all: true }), getPilot(), - getNumbers() + getNumbers(), + getSubscribers() ]).then((result) => { resolve({ seats: result[0].subscribers, @@ -271,6 +274,27 @@ export function setSeatMusicOnHold (seatId, musicOnHold) { return setPreferenceMusicOnHold(seatId, musicOnHold) } +/** + * @param seatId + * @param cli + */ +export function setSeatCli (seatId, cli) { + return new Promise((resolve, reject) => { + Promise.resolve().then(() => { + return setPreferenceCli(seatId, cli) + }).then(() => { + return getSubscriberAndPreferences(seatId) + }).then((result) => { + resolve({ + seat: result.subscriber, + preferences: result.preferences + }) + }).catch((err) => { + reject(err) + }) + }) +} + /** * @param options * @param options.seatId diff --git a/src/api/subscriber.js b/src/api/subscriber.js index 0372eb87..0a16301e 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -333,6 +333,10 @@ export function setPreferenceMusicOnHold (id, value) { return setPreference(id, 'music_on_hold', value) } +export function setPreferenceCli (id, value) { + return setPreference(id, 'cli', value) +} + export function getSubscribers (options) { return new Promise((resolve, reject) => { options = options || {} diff --git a/src/pages/CscPagePbxSeatDetails.vue b/src/pages/CscPagePbxSeatDetails.vue index ad37a646..e17d8c3d 100644 --- a/src/pages/CscPagePbxSeatDetails.vue +++ b/src/pages/CscPagePbxSeatDetails.vue @@ -113,6 +113,27 @@ /> + + + { + cliOptions.push({ + label: cli.cc + cli.ac + cli.sn, + value: cli.cc + cli.ac + cli.sn + }) + }) + cliOptions = cliOptions.concat(this.getPrimaryNumberOptions()) + return cliOptions + }, isLoading () { return this.isSeatLoading(this.seatSelected.id) } }, watch: { seatSelected () { - this.changes = this.getSeatData() this.soundSet = this.getSoundSetBySeatId(this.seatSelected.id) + this.loadPreferences(this.seatSelected.id).then ( (preferences) => { + const clis = [...this.seatSelected.alias_numbers] + this.numbers().forEach((cli) => { + clis.push({ac: cli.ac, cc: cli.cc, sn: cli.sn, number_id: cli.id}) + }) + const cliFound = clis.find(cli => cli.cc + cli.ac + cli.sn === preferences.cli) + if (cliFound) this.currentCli = { + label: cliFound.cc + cliFound.ac + cliFound.sn, + value: cliFound.cc + cliFound.ac + cliFound.sn + } + this.changes = this.getSeatData() + }) }, seatUpdateState (state) { if (state === RequestState.succeeded) { @@ -318,7 +367,7 @@ export default { } } }, - mounted () { + async mounted () { this.selectSeat(this.id) }, beforeDestroy () { @@ -332,7 +381,9 @@ export default { 'setSeatGroups', 'setIntraPbx', 'setMusicOnHold', - 'setSeatSoundSet' + 'setSeatSoundSet', + 'loadPreferences', + 'setCli' ]), ...mapActions('pbxCallQueues', [ 'jumpToCallQueue' @@ -341,6 +392,10 @@ export default { 'selectSeat', 'resetSelectedSeat' ]), + ...mapGetters('pbx', [ + 'getPrimaryNumberOptions', + 'numbers' + ]), getAliasNumberIds () { const numberIds = [] this.seatSelected.alias_numbers.forEach((number) => { @@ -351,6 +406,9 @@ export default { getGroupIds () { return _.clone(this.seatSelected.pbx_group_ids) }, + getCliNumberId () { + return this.currentCli + }, getSoundSetId () { const soundSet = this.getSoundSetBySeatId(this.seatSelected.id) if (soundSet) { @@ -367,7 +425,8 @@ export default { clirIntrapbx: this.getIntraPbx(this.seatSelected.id), musicOnHold: this.getMusicOnHold(this.seatSelected.id), groups: this.getGroupIds(), - soundSet: this.getSoundSetId() + soundSet: this.getSoundSetId(), + cliNumber: this.getCliNumberId() } : null }, resetName () { @@ -379,6 +438,9 @@ export default { resetAliasNumbers () { this.changes.aliasNumbers = this.getAliasNumberIds() }, + resetCliNumber () { + this.changes.cliNumber = this.getCliNumberId() + }, resetGroups () { this.changes.groups = this.getGroupIds() }, @@ -405,6 +467,12 @@ export default { unassignedNumbers: _.difference(this.getAliasNumberIds(), this.changes.aliasNumbers) }) } + if (this.hasCliNumberChanged) { + this.setCli({ + seatId: this.seatSelected.id, + cli: this.changes.cliNumber + }) + } if (this.hasGroupsChanged) { this.setSeatGroups({ seatId: this.seatSelected.id, diff --git a/src/store/pbx-seats.js b/src/store/pbx-seats.js index ffaa5c6e..48a7bc2f 100644 --- a/src/store/pbx-seats.js +++ b/src/store/pbx-seats.js @@ -20,6 +20,7 @@ import { setSeatSoundSet, setSeatIntraPbx, setSeatMusicOnHold, + setSeatCli, setSeatWebPassword, getSeatPreferences, setSeatSIPPassword @@ -99,6 +100,11 @@ export default { return state?.preferenceMapById[id]?.music_on_hold || false } }, + getCurrentCli (state) { + return (id) => { + return state?.preferenceMapById[id]?.cli || false + } + }, getSeatCreatingName (state) { return _.get(state, 'seatCreating.name', '') }, @@ -438,6 +444,19 @@ export default { } catch (err) { context.commit('seatUpdateFailed', err.message) } + }, + async setCli (context, options) { + context.commit('seatUpdateRequesting', { + seatId: options.seatId, + seatField: options.message || i18n.t('cli of the seat') + }) + try { + const result = await setSeatCli(options.seatId, options.cli) + context.commit('seatUpdateSucceeded', result) + } catch (err) { + context.commit('seatUpdateFailed', err.message) + } } + } } diff --git a/src/store/pbx.js b/src/store/pbx.js index 7cd4bf4a..291dc21a 100644 --- a/src/store/pbx.js +++ b/src/store/pbx.js @@ -58,6 +58,18 @@ export default { }) return options }, + getPrimaryNumberOptions (state) { + const options = [] + state.numberList.forEach((number) => { + if (number.is_primary) { + options.push({ + label: numberFilter(number), + value: numberFilter(number) + }) + } + }) + return options + }, getFullNumberOptions (state) { const options = [] state.numberList.forEach((number) => {