diff --git a/src/api/pbx-seats.js b/src/api/pbx-seats.js index d71e1542..f21373de 100644 --- a/src/api/pbx-seats.js +++ b/src/api/pbx-seats.js @@ -9,6 +9,7 @@ import { setPbxGroupIds, setSubscriberNumbers, setPreferenceIntraPbx, + setPreferenceMusicOnHold, getPreferences, setPbxSIPPassword } from './subscriber' @@ -262,6 +263,14 @@ export function setSeatIntraPbx (seatId, clirIntrapbx) { return setPreferenceIntraPbx(seatId, clirIntrapbx) } +/** + * @param seatId + * @param musicOnHold + */ +export function setSeatMusicOnHold (seatId, musicOnHold) { + return setPreferenceMusicOnHold(seatId, musicOnHold) +} + /** * @param options * @param options.seatId diff --git a/src/api/subscriber.js b/src/api/subscriber.js index 63cebc6a..507909a3 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -329,6 +329,10 @@ export function setPreferenceIntraPbx (id, value) { return setPreference(id, 'clir_intrapbx', value) } +export function setPreferenceMusicOnHold (id, value) { + return setPreference(id, 'music_on_hold', value) +} + export function getSubscribers (options) { return new Promise((resolve, reject) => { options = options || {} diff --git a/src/components/pages/PbxConfiguration/CscPbxSeat.vue b/src/components/pages/PbxConfiguration/CscPbxSeat.vue index b177fa83..d1a186c1 100644 --- a/src/components/pages/PbxConfiguration/CscPbxSeat.vue +++ b/src/components/pages/PbxConfiguration/CscPbxSeat.vue @@ -99,6 +99,19 @@ /> + + + + + @@ -243,6 +256,13 @@ :disable="loading" @click="jumpToCallQueue" /> + @@ -318,6 +338,10 @@ export default { hasCallQueue: { type: Boolean, default: undefined + }, + musicOnHold: { + type: Boolean, + default: undefined } }, data () { @@ -398,6 +422,7 @@ export default { aliasNumbers: this.getAliasNumberIds(), webPassword: this.seat.webpassword, clirIntrapbx: this.intraPbx, + musicOnHold: this.musicOnHold, groups: this.getGroupIds(), soundSet: this.getSoundSetId() } @@ -511,6 +536,12 @@ export default { seatId: this.seat.id, intraPbx: this.changes.clirIntrapbx }) + }, + changeMusicOnHold () { + this.$emit('save-music-on-hold', { + seatId: this.seat.id, + musicOnHold: this.changes.musicOnHold + }) } } } diff --git a/src/i18n/en.json b/src/i18n/en.json index 6a9be1c5..09315e08 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -246,6 +246,7 @@ "Monday": "Monday", "Monthly": "Monthly", "Music on Hold": "Music on Hold", + "Music on hold": "Music on hold", "Mute": "Mute", "Mute all": "Mute all", "MyNumberList": "MyNumberList", @@ -529,6 +530,7 @@ "forwarded to": "forwarded to", "from": "from", "minutes": "minutes", + "music on hold of the seat": "music on hold of the seat", "name": "name", "office hours are": "office hours are", "office hours are ...": "office hours are ...", @@ -549,4 +551,4 @@ "{field} must be maximum of {maxValue} seconds": "{field} must be maximum of {maxValue} seconds", "{field} must consist of numeric characters only": "{field} must consist of numeric characters only", "{field} must have at most {maxLength} letters": "{field} must have at most {maxLength} letters" -} +} \ No newline at end of file diff --git a/src/pages/CscPagePbxSeats.vue b/src/pages/CscPagePbxSeats.vue index 4d700077..3e6f2cc1 100644 --- a/src/pages/CscPagePbxSeats.vue +++ b/src/pages/CscPagePbxSeats.vue @@ -77,6 +77,7 @@ :class="'col-xs-12 col-md-6 col-lg-4 csc-item-' + ((index % 2 === 0)?'odd':'even')" :seat="seat" :intra-pbx="getIntraPbx(seat.id)" + :music-on-hold="getMusicOnHold(seat.id)" :groups="groupMapById" :expanded="isSeatExpanded(seat.id)" :loading="isSeatLoading(seat.id)" @@ -95,6 +96,7 @@ @save-groups="setSeatGroups" @save-sound-set="setSeatSoundSet" @save-intra-pbx="setIntraPbx" + @save-music-on-hold="setMusicOnHold" @jump-to-call-queue="jumpToCallQueue" /> @@ -189,6 +191,7 @@ export default { 'isSeatExpanded', 'isSeatLoading', 'getIntraPbx', + 'getMusicOnHold', 'getSoundSetBySeatId', 'getSeatCreatingName', 'getSeatUpdatingField', @@ -241,7 +244,8 @@ export default { 'setSeatGroups', 'setSeatNumbers', 'setSeatSoundSet', - 'setIntraPbx' + 'setIntraPbx', + 'setMusicOnHold' ]), ...mapMutations('pbxSeats', [ 'enableSeatAddForm', diff --git a/src/store/pbx-seats.js b/src/store/pbx-seats.js index a5a2e07c..ca5b5ad6 100644 --- a/src/store/pbx-seats.js +++ b/src/store/pbx-seats.js @@ -19,6 +19,7 @@ import { setSeatNumbers, setSeatSoundSet, setSeatIntraPbx, + setSeatMusicOnHold, setSeatWebPassword, getSeatPreferences, setSeatSIPPassword @@ -98,6 +99,11 @@ export default { return seatPreferences && seatPreferences.clir_intrapbx ? state.preferenceMapById[id].clir_intrapbx : false } }, + getMusicOnHold (state) { + return (id) => { + return state?.preferenceMapById[id]?.music_on_hold || false + } + }, getSeatCreatingName (state) { return _.get(state, 'seatCreating.name', '') }, @@ -431,6 +437,18 @@ export default { } catch (err) { context.commit('seatUpdateFailed', err.message) } + }, + async setMusicOnHold (context, options) { + context.commit('seatUpdateRequesting', { + seatId: options.seatId, + seatField: options.message || i18n.t('music on hold of the seat') + }) + try { + const result = await setSeatMusicOnHold(options.seatId, options.musicOnHold) + context.commit('seatUpdateSucceeded', result) + } catch (err) { + context.commit('seatUpdateFailed', err.message) + } } } }