314 lines
9.4 KiB
314 lines
9.4 KiB
import _ from 'lodash'
|
|
import {
|
|
createSubscriber,
|
|
deleteSubscriber,
|
|
getFullSubscribers,
|
|
getSubscriberAndPreferences,
|
|
getSubscribers,
|
|
setDisplayName,
|
|
setPbxExtension, setPbxGroupMemberIds,
|
|
setPbxHuntPolicy,
|
|
setPbxHuntTimeout, setSubscriberNumbers,
|
|
setPbxHuntCancelMode,
|
|
generateGeneralPassword
|
|
} from './subscriber'
|
|
import {
|
|
getAllSoundSets,
|
|
getPilot,
|
|
getSoundSet,
|
|
PBX_CONFIG_ORDER_BY,
|
|
PBX_CONFIG_ORDER_DIRECTION,
|
|
setSubscriberSoundSet
|
|
} from './pbx-config'
|
|
import {
|
|
assignNumbers,
|
|
getNumbers
|
|
} from './user'
|
|
import { getSeatsOnly } from './pbx-seats'
|
|
|
|
export function getGroups (options) {
|
|
return new Promise((resolve, reject) => {
|
|
const result = {
|
|
subscribers: {
|
|
items: []
|
|
},
|
|
preferences: {
|
|
items: []
|
|
},
|
|
soundSets: {
|
|
items: []
|
|
}
|
|
}
|
|
options = options || {}
|
|
options = _.merge(options, {
|
|
params: {
|
|
is_pbx_group: 1,
|
|
is_pbx_pilot: 0
|
|
}
|
|
})
|
|
Promise.resolve().then(() => {
|
|
return Promise.all([
|
|
getFullSubscribers(options),
|
|
getAllSoundSets()
|
|
])
|
|
}).then(($result) => {
|
|
result.groups = $result[0].subscribers
|
|
result.preferences.items = $result[0].preferences
|
|
result.soundSets = $result[1]
|
|
resolve(result)
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function getGroupsOnly (options) {
|
|
return new Promise((resolve, reject) => {
|
|
options = options || {}
|
|
options = _.merge(options, {
|
|
params: {
|
|
is_pbx_group: 1,
|
|
is_pbx_pilot: 0
|
|
}
|
|
})
|
|
Promise.resolve().then(() => {
|
|
return getSubscribers(options)
|
|
}).then((result) => {
|
|
resolve(result)
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function getGroupList (options) {
|
|
return new Promise((resolve, reject) => {
|
|
const page = _.get(options, 'page', 1)
|
|
const filters = _.get(options, 'filters', {})
|
|
Promise.all([
|
|
getGroups({
|
|
params: {
|
|
page: page,
|
|
...filters,
|
|
order_by: PBX_CONFIG_ORDER_BY,
|
|
order_by_direction: PBX_CONFIG_ORDER_DIRECTION
|
|
}
|
|
}),
|
|
getSeatsOnly({
|
|
all: true
|
|
}),
|
|
getPilot(),
|
|
getNumbers()
|
|
]).then((result) => {
|
|
resolve({
|
|
groups: result[0].groups,
|
|
preferences: result[0].preferences,
|
|
soundSets: result[0].soundSets,
|
|
seats: result[1],
|
|
pilot: result[2],
|
|
numbers: result[3]
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export async function createGroup (group) {
|
|
const generatePassword = await generateGeneralPassword()
|
|
return new Promise((resolve, reject) => {
|
|
let subscriberId
|
|
Promise.resolve().then(() => {
|
|
return createSubscriber({
|
|
username: createUsername(group.name),
|
|
password: generatePassword,
|
|
is_pbx_group: true,
|
|
display_name: group.name,
|
|
pbx_extension: group.extension,
|
|
pbx_hunt_policy: group.huntPolicy,
|
|
pbx_hunt_timeout: group.huntTimeout,
|
|
pbx_hunt_cancel_mode: group.huntCancelMode,
|
|
pbx_groupmember_ids: group.seats
|
|
}, {})
|
|
}).then(($subscriberId) => {
|
|
subscriberId = $subscriberId
|
|
if (group.soundSet !== null && group.soundSet !== undefined) {
|
|
return getSoundSet(group.soundSet)
|
|
} else {
|
|
return Promise.resolve(null)
|
|
}
|
|
}).then((soundSet) => {
|
|
const promises = [
|
|
assignNumbers(group.aliasNumbers, subscriberId)
|
|
]
|
|
if (soundSet !== null) {
|
|
promises.push(setSubscriberSoundSet(subscriberId, soundSet.name))
|
|
}
|
|
return Promise.all(promises)
|
|
}).then(() => {
|
|
resolve(subscriberId)
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function removeGroup (id) {
|
|
return deleteSubscriber(id)
|
|
}
|
|
|
|
export function setGroupName (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setDisplayName(options.groupId, options.groupName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupExtension (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxExtension(options.groupId, options.groupExtension)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupHuntPolicy (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxHuntPolicy(options.groupId, options.groupHuntPolicy)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupHuntTimeout (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxHuntTimeout(options.groupId, options.groupHuntTimeout)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupHuntCancelMode (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxHuntCancelMode(options.groupId, options.groupHuntCancelMode)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupNumbers (options) {
|
|
return new Promise((resolve, reject) => {
|
|
setSubscriberNumbers({
|
|
subscriberId: options.groupId,
|
|
pilotId: options.pilotId,
|
|
assignedNumbers: options.assignedNumbers,
|
|
unassignedNumbers: options.unassignedNumbers
|
|
}).then((result) => {
|
|
if (result.subscriber !== null && result.preferences !== null) {
|
|
return result
|
|
}
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupSeats (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxGroupMemberIds(options.groupId, options.seatIds)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function setGroupSoundSet (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
if (options.soundSetId !== null && options.soundSetId !== undefined) {
|
|
return getSoundSet(options.soundSetId)
|
|
} else {
|
|
return Promise.resolve(null)
|
|
}
|
|
}).then((soundSet) => {
|
|
const soundSetName = _.get(soundSet, 'name', null)
|
|
return setSubscriberSoundSet(options.groupId, soundSetName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.groupId)
|
|
}).then((result) => {
|
|
resolve({
|
|
group: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
// This mirrors the logic we use in ngcp-admin to handle the pbx groups creation
|
|
// If you change the logic below make sure you make the same changes in ngcp-admin too
|
|
function createUsername (name) {
|
|
return name.trim().replaceAll(' ', '-').replace(/[^a-zA-Z0-9\-_ ]/g, '')
|
|
}
|