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) => {