diff --git a/src/api/pbx-config.js b/src/api/pbx-config.js index 0ac2c2eb..6c0182ac 100644 --- a/src/api/pbx-config.js +++ b/src/api/pbx-config.js @@ -1,7 +1,8 @@ import Vue from 'vue'; import { getJsonBody } from './utils'; -import { getNumbers } from './user'; +import { getNumbers, assignNumber, assignNumbers } from './user'; +import { createSubscriber } from './subscriber'; var assumedRows = 1000; @@ -12,7 +13,7 @@ export function getAllPbxSubscribers() { return Vue.http.get('/api/subscribers', { params: _.assign(params, { page: 1, - rows: assumedRows, + rows: assumedRows }) }); }).then((res)=>{ @@ -33,11 +34,11 @@ export function getAllPbxSubscribers() { let seats = []; let groups = []; subscribers.forEach((subscriber)=>{ - if(subscriber.is_pbx_group) { - groups.push(subscriber); - } else if(subscriber.is_pbx_pilot) { + if(_.has(subscriber, 'is_pbx_pilot') && subscriber.is_pbx_pilot === true) { pilot = subscriber; - } else { + } else if(_.has(subscriber, 'is_pbx_group') && subscriber.is_pbx_group === true) { + groups.push(subscriber); + } else if (_.has(subscriber, 'pbx_extension') && subscriber.pbx_extension !== null) { seats.push(subscriber); } }); @@ -69,3 +70,35 @@ export function getPbxConfiguration() { }); }); } + +export function addGroup(group) { + return new Promise((resolve, reject)=>{ + let randomToken = ()=>{ return 'd' + Date.now() + "r" + (Math.round(Math.random() * 1000000) + 1000000); }; + Promise.resolve().then(()=>{ + return createSubscriber({ + customer_id: group.customerId, + domain_id: group.domainId, + username: randomToken(), + password: randomToken(), + display_name: group.name, + is_pbx_group: true, + pbx_extension: group.extension, + pbx_hunt_policy: group.huntPolicy, + pbx_hunt_timeout: group.huntTimeout, + pbx_groupmember_ids: group.seats + }); + }).then((subscriberId)=>{ + return assignNumbers(group.aliasNumbers, subscriberId); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function deleteGroup(id) { + return new Promise((resolve, reject)=>{ + + }); +} diff --git a/src/api/subscriber.js b/src/api/subscriber.js index cb6c1626..861f4d80 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -179,3 +179,36 @@ export function enablePrivacy(id) { export function disablePrivacy(id) { return setPrivacy(id, false); } + +export function createSubscriber(subscriber) { + return new Promise((resolve, reject)=>{ + Vue.http.post('/api/subscribers/', subscriber, { + params: { + customer_id: subscriber.customer_id + } + }).then((res)=>{ + resolve(_.last(_.split(res.headers.get('Location'), '/'))); + }).catch((err)=>{ + if(err.status === 422) { + reject(new Error(err.body.message)); + } else { + reject(err); + } + }); + }); +} + +// export function deleteSubscriber(id) { +// return new Promise((resolve, reject)=>{ +// Vue.http.delete('/api/subscribers/', null, { +// }).then((res)=>{ +// resolve(_.last(_.split(res.headers.get('Location'), '/'))); +// }).catch((err)=>{ +// if(err.status === 422) { +// reject(new Error(err.body.message)); +// } else { +// reject(err); +// } +// }); +// }); +// } diff --git a/src/api/user.js b/src/api/user.js index 9303b394..7c0e11bd 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -68,6 +68,44 @@ export function getCapabilities() { }); } +export function assignNumber(numberId, subscriberId) { + return new Promise((resolve, reject)=>{ + var headers = {}; + headers['Content-Type'] = 'application/json-patch+json'; + Promise.resolve().then((result)=>{ + return Vue.http.patch('/api/numbers/' + numberId, [{ + op: 'replace', + path: '/subscriber_id', + value: subscriberId + }], { + headers: headers + }); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function assignNumbers(numberIds, subscriberId) { + return new Promise((resolve, reject)=>{ + if(_.isArray(numberIds) && numberIds.length > 0) { + let assignNumberRequests = []; + numberIds.forEach((numberId)=>{ + assignNumberRequests.push(assignNumber(numberId, subscriberId)); + }); + Promise.all(assignNumberRequests).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + } else { + reject(new Error('No numberIds given')); + } + }); +} + export function getNumbers() { return new Promise((resolve, reject)=>{ let params = {}; diff --git a/src/components/pages/PbxConfiguration/CscPbxGroup.vue b/src/components/pages/PbxConfiguration/CscPbxGroup.vue index db759a32..ff76f380 100644 --- a/src/components/pages/PbxConfiguration/CscPbxGroup.vue +++ b/src/components/pages/PbxConfiguration/CscPbxGroup.vue @@ -1,5 +1,5 @@