diff --git a/src/api/call.js b/src/api/call.js index dc8d44f2..88ec2d3c 100644 --- a/src/api/call.js +++ b/src/api/call.js @@ -1,8 +1,8 @@ -import { getList } from 'src/api/common' +import { get } from 'src/api/common' -export async function fetchPhonebookEntries (number) { - return getList({ - resource: 'subscriberphonebookentries', +export async function fetchPhonebookEntries (subscriberId, number) { + return get({ + path: `api/v2/subscribers/${subscriberId}/phonebook`, params: { number } }) } diff --git a/src/api/subscriber.js b/src/api/subscriber.js index 4b605542..a3cface4 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -66,12 +66,12 @@ export async function setPreferenceCallBlocking (id, field, value) { await addPreference(id, field, value) } -export async function setPreferencePhonebook (id, field, value) { +export async function setPreferencePhonebook (subscriberId, phonebookId, field, value) { if (value === undefined || value === null || value === '' || (Array.isArray(value) && !value.length)) { - await removePreferencePhonebook(id, field) + await removePreferencePhonebook(subscriberId, phonebookId, field) } else { try { - await replacePreferencePhonebook(id, field, value) + await replacePreferencePhonebook(subscriberId, phonebookId, field, value) } catch (err) { if (err) { throw err @@ -79,12 +79,12 @@ export async function setPreferencePhonebook (id, field, value) { } } } -export async function setPreferencePhonebookCustomer (id, field, value) { +export async function setPreferencePhonebookCustomer (customerId, phonebookId, field, value) { if (value === undefined || value === null || value === '' || (Array.isArray(value) && !value.length)) { - await removePreferencePhonebookCustomer(id, field) + await removePreferencePhonebookCustomer(customerId, phonebookId, field) } else { try { - await replacePreferencePhonebookCustomer(id, field, value) + await replacePreferencePhonebookCustomer(customerId, phonebookId, field, value) } catch (err) { if (err) { throw err @@ -124,15 +124,15 @@ export async function removePreference (id, field) { fieldPath: field }) } -export async function removePreferencePhonebook (id, field) { +export async function removePreferencePhonebook (subscriberId, phonebookId, field) { return await patchRemove({ - path: `api/subscriberphonebookentries/${id}`, + path: `api/v2/subscribers/${subscriberId}/phonebook/${phonebookId}`, fieldPath: field }) } -export async function removePreferencePhonebookCustomer (id, field) { +export async function removePreferencePhonebookCustomer (customerId, phonebookId, field) { return await patchRemove({ - path: `api/customerphonebookentries/${id}`, + path: `api/v2/customers/${customerId}/phonebook/${phonebookId}`, fieldPath: field }) } @@ -176,10 +176,10 @@ export function replacePreference (id, field, value) { }) }) } -export function replacePreferencePhonebook (id, field, value) { +export function replacePreferencePhonebook (subscriberId, phonebookId, field, value) { return new Promise((resolve, reject) => { patchReplace({ - path: `api/subscriberphonebookentries/${id}`, + path: `api/v2/subscribers/${subscriberId}/phonebook/${phonebookId}`, fieldPath: field, value }).then(() => { @@ -189,10 +189,10 @@ export function replacePreferencePhonebook (id, field, value) { }) }) } -export function replacePreferencePhonebookCustomer (id, field, value) { +export function replacePreferencePhonebookCustomer (customerId, phonebookId, field, value) { return new Promise((resolve, reject) => { patchReplace({ - path: `api/customerphonebookentries/${id}`, + path: `api/v2/customers/${customerId}/phonebook/${phonebookId}`, fieldPath: field, value }).then(() => { @@ -780,19 +780,8 @@ export async function getSubscriberPhonebook (options) { return list } export async function getCustomerPhonebook (options) { - let all = false - if (options.rows === 0) { - delete options.rows - delete options.page - all = true - } - if (!options.order_by) { - delete options.order_by - delete options.order_by_direction - } - const list = await getList({ - resource: 'customerphonebookentries', - all, + const list = await get({ + path: `api/v2/customers/${options.customer_id}/phonebook`, params: options }) return list @@ -809,37 +798,44 @@ export async function createPhonebook (data) { export async function createCustomerPhonebook (data) { const payLoad = { name: data.name, - number: data.number + number: data.number, + customer_id: Number(data.customer_id) } - return await httpApi.post('api/customerphonebookentries/', payLoad) + return await httpApi.post(`api/v2/customers/${data.customer_id}/phonebook`, payLoad) +} +function createFormDataFromFile (payload) { + const formData = new FormData() + formData.append('file', payload.file) + return formData } export async function uploadCsv (context, formData) { + const payload = createFormDataFromFile(formData) const config = { headers: { - 'Content-Type': 'text/csv' + 'Content-Type': 'multipart/form-data' } } - const purgeExistingValue = formData?.purge_existing ? '1' : '0' + const purgeExistingValue = formData?.purge_existing ? 'true' : 'false' await apiUploadCsv({ - path: 'api/customerphonebookentries' + `/?purge_existing=${purgeExistingValue}&customer_id=${formData.customer_id}`, - data: formData.file, + path: `api/v2/customers/${formData?.customerId}/phonebook/?purge_existing=${purgeExistingValue}`, + data: payload, config }) } -export function setValueShared (id, value) { - return setPreferencePhonebook(id, 'shared', value) +export function setValueShared (subscriberId, phonebookId, value) { + return setPreferencePhonebook(subscriberId, phonebookId, 'shared', value) } -export function setValueName (id, value) { - return setPreferencePhonebook(id, 'name', value) +export function setValueName (subscriberId, phonebookId, value) { + return setPreferencePhonebook(subscriberId, phonebookId, 'name', value) } -export function setValueNameCustomer (id, value) { - return setPreferencePhonebookCustomer(id, 'name', value) +export function setValueNameCustomer (customerId, phonebookId, value) { + return setPreferencePhonebookCustomer(customerId, phonebookId, 'name', value) } -export function setValueNumber (id, value) { - return setPreferencePhonebook(id, 'number', value) +export function setValueNumber (subscriberId, phonebookId, value) { + return setPreferencePhonebook(subscriberId, phonebookId, 'number', value) } -export function setValueNumberCustomer (id, value) { - return setPreferencePhonebookCustomer(id, 'number', value) +export function setValueNumberCustomer (customerId, phonebookId, value) { + return setPreferencePhonebookCustomer(customerId, phonebookId, 'number', value) } export async function getRecordingStream (fileId) { return await getAsBlob({ diff --git a/src/pages/CscPageCustomerPhonebook.vue b/src/pages/CscPageCustomerPhonebook.vue index 3b9c3b0d..25f1e62d 100644 --- a/src/pages/CscPageCustomerPhonebook.vue +++ b/src/pages/CscPageCustomerPhonebook.vue @@ -169,7 +169,7 @@ export default { ...mapWaitingActions('user', { loadCustomerPhonebook: 'loadCustomerPhonebook', removeCustomerPhonebook: 'removeCustomerPhonebook', - ajaxDownloadPhonebookCSV: 'ajaxDownloadPhonebookCSV' + downloadPhonebookAsCSV: 'downloadPhonebookAsCSV' }), async refresh () { await this.fetchPaginatedRegistrations({ @@ -179,6 +179,7 @@ export default { async fetchPaginatedRegistrations (props) { const { page, rowsPerPage, sortBy, descending } = props.pagination const count = await this.loadCustomerPhonebook({ + customer_id: this.getCustomerId, page, rows: rowsPerPage, order_by: sortBy, @@ -216,12 +217,15 @@ export default { cancel: true, persistent: true }).onOk(async (data) => { - await this.removeCustomerPhonebook(row) + await this.removeCustomerPhonebook({ + row, + customerId: this.getCustomerId + }) await this.refresh() }) }, async downloadCSV () { - await this.ajaxDownloadPhonebookCSV(this.getCustomerId) + await this.downloadPhonebookAsCSV(this.getCustomerId) } } } diff --git a/src/pages/CscPageCustomerPhonebookAdd.vue b/src/pages/CscPageCustomerPhonebookAdd.vue index 6e336305..704a3051 100644 --- a/src/pages/CscPageCustomerPhonebookAdd.vue +++ b/src/pages/CscPageCustomerPhonebookAdd.vue @@ -72,6 +72,7 @@ import { required } from '@vuelidate/validators' import CscPageSticky from 'components/CscPageSticky' import { showGlobalError } from 'src/helpers/ui' import { mapWaitingActions } from 'vue-wait-vue3' +import { mapGetters } from 'vuex' export default { name: 'CscPageCustomerPhonebookAdd', components: { @@ -97,6 +98,9 @@ export default { } }, computed: { + ...mapGetters('user', [ + 'getCustomerId' + ]), nameErrorMessage () { const errorsTab = this.v$.formData.name.$errors if (errorsTab && errorsTab.length > 0 && errorsTab[0].$validator === 'required') { @@ -139,6 +143,7 @@ export default { }, async confirm () { try { + this.formData.customer_id = this.getCustomerId await this.createPhonebookCustomer(this.formData) this.$router.push('/user/pbx-configuration/customer-phonebook/') } catch (error) { diff --git a/src/pages/CscPageCustomerPhonebookDetails.vue b/src/pages/CscPageCustomerPhonebookDetails.vue index 0024b774..4819dde7 100644 --- a/src/pages/CscPageCustomerPhonebookDetails.vue +++ b/src/pages/CscPageCustomerPhonebookDetails.vue @@ -70,6 +70,7 @@ import useValidate from '@vuelidate/core' import { required } from '@vuelidate/validators' import CscPageSticky from 'components/CscPageSticky' import { mapWaitingActions } from 'vue-wait-vue3' +import { mapGetters } from 'vuex' export default { name: 'CscPageCustomerPhonebookDetails', components: { @@ -98,6 +99,11 @@ export default { async mounted () { await this.getPhonebook(this.id) }, + computed: { + ...mapGetters('user', [ + 'getCustomerId' + ]) + }, methods: { ...mapWaitingActions('user', { getPhonebookCustomerDetails: 'getPhonebookCustomerDetails', @@ -105,7 +111,7 @@ export default { getValueNumberCustomer: 'getValueNumberCustomer' }), async getPhonebook (id) { - const response = await this.getPhonebookCustomerDetails(id) + const response = await this.getPhonebookCustomerDetails({ phonebookId: id, customerId: this.getCustomerId }) this.formData.name = response.data.name this.formData.number = response.data.number }, @@ -121,12 +127,14 @@ export default { }, async changeValueName () { await this.getValueNameCustomer({ + customerId: this.getCustomerId, phonebookId: this.id, name: this.formData.name }) }, async changeValueNumber () { await this.getValueNumberCustomer({ + customerId: this.getCustomerId, phonebookId: this.id, number: this.formData.number }) diff --git a/src/pages/CscPageCustomerPhonebookUpload.vue b/src/pages/CscPageCustomerPhonebookUpload.vue index bfe02e74..82e7c0d1 100644 --- a/src/pages/CscPageCustomerPhonebookUpload.vue +++ b/src/pages/CscPageCustomerPhonebookUpload.vue @@ -99,7 +99,7 @@ export default { return { file: null, purge_existing: false, - customer_id: this.getCustomerId() + customerId: this.getCustomerId() } }, cancel () { diff --git a/src/pages/CscPageSubscriberPhonebookDetails.vue b/src/pages/CscPageSubscriberPhonebookDetails.vue index e737c7ae..c629f97e 100644 --- a/src/pages/CscPageSubscriberPhonebookDetails.vue +++ b/src/pages/CscPageSubscriberPhonebookDetails.vue @@ -117,18 +117,21 @@ export default { }, async changeValueName () { await this.getValueName({ + subscriberId: this.getSubscriberId, phonebookId: this.id, name: this.name }) }, changeValueShared () { this.getValueShared({ + subscriberId: this.getSubscriberId, phonebookId: this.id, shared: this.shared }) }, changeValueNumber () { this.getValueNumber({ + subscriberId: this.getSubscriberId, phonebookId: this.id, number: this.number }) diff --git a/src/store/call/actions.js b/src/store/call/actions.js index 652cf3b1..cc8d0a5e 100644 --- a/src/store/call/actions.js +++ b/src/store/call/actions.js @@ -19,6 +19,7 @@ import { callToggleMicrophone, callToggleRemoteAudio } from 'src/api/ngcp-call' +import { getSubscriberId } from 'src/auth' import { showGlobalError } from 'src/helpers/ui' import { errorVisibilityTimeout } from 'src/store/call/common' @@ -42,8 +43,9 @@ export default { }, async fetchPhonebookEntryName (context, number) { try { - const phoneBookEntryArray = await fetchPhonebookEntries(number) - const phoneBookEntry = phoneBookEntryArray?.items[0] || null + const subscriberId = getSubscriberId() + const phoneBookEntryArray = await fetchPhonebookEntries(subscriberId, number) + const phoneBookEntry = phoneBookEntryArray?.data[0] || null if (phoneBookEntry) { context.commit('fetchPhonebookEntrySuccess', phoneBookEntry.name) } diff --git a/src/store/user.js b/src/store/user.js index eeba094f..b851c5f0 100644 --- a/src/store/user.js +++ b/src/store/user.js @@ -583,22 +583,19 @@ export default { const list = await getCustomerPhonebook({ ...options }) - commit('setCustomerPhonebook', list.items) + commit('setCustomerPhonebook', list.data) return list.totalCount } catch (err) { commit('setCustomerPhonebook', []) throw err } }, - async ajaxDownloadPhonebookCSV ({ commit }, customerId = 0) { + async downloadPhonebookAsCSV ({ commit }, customerId) { const apiGetOptions = { - resource: 'customerphonebookentries', + resource: `v2/customers/${customerId}/phonebook`, config: { headers: { Accept: 'text/csv' - }, - params: { - customer_id: customerId } } } @@ -614,8 +611,8 @@ export default { async removeSubscriberPhonebook (context, { row, subscriberId }) { await httpApi.delete(`api/v2/subscribers/${subscriberId}/phonebook/${row.id}`) }, - async removeCustomerPhonebook (context, row) { - await httpApi.delete(`api/customerphonebookentries/${row.id}`) + async removeCustomerPhonebook (context, { row, customerId }) { + await httpApi.delete(`api/v2/customers/${customerId}/phonebook/${row.id}`) }, async getNcosLevelsSubscriber () { const ncosLevel = [] @@ -656,28 +653,28 @@ export default { const list = await httpApi.get(`api/v2/subscribers/${subscriberId}/phonebook/${phonebookId}`) return list }, - async getPhonebookCustomerDetails (context, id) { - const list = await httpApi.get(`api/customerphonebookentries/${id}`) + async getPhonebookCustomerDetails (context, { phonebookId, customerId }) { + const list = await httpApi.get(`api/v2/customers/${customerId}/phonebook/${phonebookId}`) return list }, async getValueShared (context, options) { - await setValueShared(options.phonebookId, options.shared) + await setValueShared(options.subscriberId, options.phonebookId, options.shared) }, async updateValueShared (context, row) { context.commit('setPhonebookShared', { id: row.id, value: !row.shared }) - await setValueShared(row.id, row.shared) + await setValueShared(row.subscriber_id, row.id, row.shared) }, async getValueName (context, options) { - await setValueName(options.phonebookId, options.name) + await setValueName(options.subscriberId, options.phonebookId, options.name) }, async getValueNameCustomer (context, options) { - await setValueNameCustomer(options.phonebookId, options.name) + await setValueNameCustomer(options.customerId, options.phonebookId, options.name) }, async getValueNumber (context, options) { - await setValueNumber(options.phonebookId, options.number) + await setValueNumber(options.subscriberId, options.phonebookId, options.number) }, async getValueNumberCustomer (context, options) { - await setValueNumberCustomer(options.phonebookId, options.number) + await setValueNumberCustomer(options.customerId, options.phonebookId, options.number) }, async createPhonebookSubscriber (context, data) { await createPhonebook(data)