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 @@
-
+
{{ group.display_name }}
@@ -9,7 +9,7 @@
-
+
@@ -18,26 +18,25 @@
-
+
-
+
-
+
-