You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
8.8 KiB
326 lines
8.8 KiB
import {
|
|
createSubscriber,
|
|
deleteSubscriber,
|
|
getFullSubscribers,
|
|
getSubscriberAndPreferences, getSubscribers,
|
|
setDisplayName,
|
|
setPbxExtension,
|
|
setPbxWebPassword,
|
|
setPbxGroupIds,
|
|
setSubscriberNumbers,
|
|
setPreferenceIntraPbx,
|
|
getPreferences
|
|
} from './subscriber'
|
|
import _ from 'lodash'
|
|
import {
|
|
getAllSoundSets,
|
|
getPilot,
|
|
getSoundSet,
|
|
createId,
|
|
PBX_CONFIG_ORDER_BY,
|
|
PBX_CONFIG_ORDER_DIRECTION,
|
|
setSubscriberSoundSet
|
|
} from './pbx-config'
|
|
import {
|
|
assignNumbers,
|
|
getNumbers
|
|
} from './user'
|
|
import {
|
|
getGroupsOnly
|
|
} from './pbx-groups'
|
|
|
|
export function getSeats (options) {
|
|
return new Promise((resolve, reject) => {
|
|
options = options || {}
|
|
options = _.merge(options, {
|
|
params: {
|
|
is_pbx_group: 0,
|
|
is_pbx_pilot: 0
|
|
}
|
|
})
|
|
Promise.resolve().then(() => {
|
|
return Promise.all([
|
|
getFullSubscribers(options),
|
|
getAllSoundSets()
|
|
])
|
|
}).then((result) => {
|
|
resolve({
|
|
subscribers: result[0].subscribers,
|
|
preferences: {
|
|
items: result[0].preferences
|
|
},
|
|
soundSets: result[1]
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function getSeatsOnly (options) {
|
|
return new Promise((resolve, reject) => {
|
|
options = options || {}
|
|
options = _.merge(options, {
|
|
params: {
|
|
is_pbx_group: 0,
|
|
is_pbx_pilot: 0
|
|
}
|
|
})
|
|
Promise.resolve().then(() => {
|
|
return getSubscribers(options)
|
|
}).then((result) => {
|
|
resolve(result)
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function getSeatList (options) {
|
|
return new Promise((resolve, reject) => {
|
|
const page = _.get(options, 'page', 1)
|
|
const displayName = _.get(options, 'display_name', null)
|
|
const pbxExtension = _.get(options, 'pbx_extension', null)
|
|
const primaryNumber = _.get(options, 'primary_number', null)
|
|
const aliasNumber = _.get(options, 'alias_number', null)
|
|
const params = {
|
|
page: page,
|
|
order_by: PBX_CONFIG_ORDER_BY,
|
|
order_by_direction: PBX_CONFIG_ORDER_DIRECTION
|
|
}
|
|
if (displayName) {
|
|
params.display_name = displayName
|
|
}
|
|
if (pbxExtension) {
|
|
params.pbx_extension = pbxExtension
|
|
}
|
|
if (primaryNumber) {
|
|
params.primary_number = primaryNumber
|
|
}
|
|
if (aliasNumber) {
|
|
params.alias_number = aliasNumber
|
|
}
|
|
Promise.all([
|
|
getSeats({
|
|
params: params
|
|
}),
|
|
getGroupsOnly({
|
|
all: true
|
|
}),
|
|
getPilot(),
|
|
getNumbers()
|
|
]).then((result) => {
|
|
resolve({
|
|
seats: result[0].subscribers,
|
|
preferences: result[0].preferences,
|
|
soundSets: result[0].soundSets,
|
|
groups: result[1],
|
|
pilot: result[2],
|
|
numbers: result[3]
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function createSeat (seat) {
|
|
return new Promise((resolve, reject) => {
|
|
let subscriberId
|
|
Promise.resolve().then(() => {
|
|
return createSubscriber({
|
|
username: _.kebabCase(seat.name),
|
|
password: seat.sipPassword ? seat.sipPassword : createId(),
|
|
display_name: seat.name,
|
|
webpassword: seat.webPassword.length > 0 ? seat.webPassword : null,
|
|
is_pbx_group: false,
|
|
pbx_extension: seat.extension,
|
|
pbx_group_ids: seat.groups
|
|
})
|
|
}).then(($subscriberId) => {
|
|
subscriberId = $subscriberId
|
|
setSeatIntraPbx(subscriberId, seat.clirIntrapbx)
|
|
if (seat.soundSet !== null && seat.soundSet !== undefined) {
|
|
return getSoundSet(seat.soundSet)
|
|
} else {
|
|
return Promise.resolve(null)
|
|
}
|
|
}).then((soundSet) => {
|
|
const promises = [
|
|
assignNumbers(seat.aliasNumbers, subscriberId)
|
|
]
|
|
if (soundSet !== null) {
|
|
promises.push(setSubscriberSoundSet(subscriberId, soundSet.name))
|
|
}
|
|
return Promise.all(promises)
|
|
}).then(() => {
|
|
resolve(subscriberId)
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
export function removeSeat (id) {
|
|
return deleteSubscriber(id)
|
|
}
|
|
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.seatName
|
|
*/
|
|
export function setSeatName (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setDisplayName(options.seatId, options.seatName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.seatExtension
|
|
*/
|
|
export function setSeatExtension (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxExtension(options.seatId, options.seatExtension)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.seatWebPassword
|
|
*/
|
|
export function setSeatWebPassword (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxWebPassword(options.seatId, options.seatWebPassword)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param clirIntrapbx
|
|
*/
|
|
export function setSeatIntraPbx (seatId, clirIntrapbx) {
|
|
return setPreferenceIntraPbx(seatId, clirIntrapbx)
|
|
}
|
|
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.groupIds
|
|
*/
|
|
export function setSeatGroups (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxGroupIds(options.seatId, options.groupIds)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.pilotId
|
|
* @param options.assignedNumbers
|
|
* @param options.unassignedNumbers
|
|
* @return {Promise<any>}
|
|
*/
|
|
export function setSeatNumbers (options) {
|
|
return new Promise((resolve, reject) => {
|
|
setSubscriberNumbers({
|
|
subscriberId: options.seatId,
|
|
pilotId: options.pilotId,
|
|
assignedNumbers: options.assignedNumbers,
|
|
unassignedNumbers: options.unassignedNumbers
|
|
}).then((result) => {
|
|
resolve(result)
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.soundSetId
|
|
*/
|
|
export function setSeatSoundSet (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.seatId, soundSetName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
*/
|
|
export async function getSeatPreferences (seatId) {
|
|
try {
|
|
return await getPreferences(seatId)
|
|
} catch (err) {
|
|
return err
|
|
}
|
|
}
|