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.
583 lines
16 KiB
583 lines
16 KiB
import _ from 'lodash'
|
|
import {
|
|
PBX_CONFIG_ORDER_BY,
|
|
PBX_CONFIG_ORDER_DIRECTION,
|
|
getAllSoundSets,
|
|
getNcos,
|
|
getNcosSet,
|
|
getPilot,
|
|
getSoundSet,
|
|
setSubscriberNcos,
|
|
setSubscriberNcosSet,
|
|
setSubscriberSoundSet
|
|
} from 'src/api/pbx-config'
|
|
import { getGroupsOnly } from 'src/api/pbx-groups'
|
|
import {
|
|
createSubscriber,
|
|
deleteSubscriber,
|
|
generateGeneralPassword,
|
|
getFullSubscribers,
|
|
getPreferences,
|
|
getSubscriberAndPreferences,
|
|
getSubscribers,
|
|
setDisplayName,
|
|
setPbxExtension,
|
|
setPbxGroupIds,
|
|
setPbxSIPPassword,
|
|
setPbxWebPassword,
|
|
setPreferenceAnnouncementCallSetup,
|
|
setPreferenceAnnouncementCfu,
|
|
setPreferenceAnnouncementToCallee,
|
|
setPreferenceCli,
|
|
setPreferenceClir,
|
|
setPreferenceCstaClient,
|
|
setPreferenceCstaController,
|
|
setPreferenceIgnoreCfWhenHunting,
|
|
setPreferenceIntraPbx,
|
|
setPreferenceMusicOnHold,
|
|
setSubscriberNumbers,
|
|
setWebUsername
|
|
} from 'src/api/subscriber'
|
|
import {
|
|
assignNumbers,
|
|
getNumbers
|
|
} from 'src/api/user'
|
|
import { getSubscriberId } from 'src/auth'
|
|
|
|
export function getSeats (options) {
|
|
return new Promise((resolve, reject) => {
|
|
const mergedOptions = _.merge(options || {}, {
|
|
params: {
|
|
is_pbx_group: 0,
|
|
is_pbx_pilot: 0
|
|
}
|
|
})
|
|
Promise.resolve().then(() => {
|
|
return Promise.all([
|
|
getFullSubscribers(mergedOptions),
|
|
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) => {
|
|
const mergedOptions = _.merge(options || {}, {
|
|
params: {
|
|
is_pbx_group: 0,
|
|
is_pbx_pilot: 0
|
|
}
|
|
})
|
|
Promise.resolve().then(() => {
|
|
return getSubscribers(mergedOptions)
|
|
}).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,
|
|
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
|
|
}),
|
|
getGroupsOnly({
|
|
all: true
|
|
}),
|
|
getPilot(),
|
|
getNumbers(),
|
|
getSubscribers()
|
|
]).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 async function createSeat (seat) {
|
|
const generatePassword = await generateGeneralPassword()
|
|
return new Promise((resolve, reject) => {
|
|
let subscriberId
|
|
Promise.resolve().then(() => {
|
|
return createSubscriber({
|
|
username: seat.sipUsername.trim(),
|
|
display_name: seat.displayName.trim(),
|
|
webusername: seat.webUsername.trim(),
|
|
password: seat.sipPassword ? seat.sipPassword : generatePassword,
|
|
webpassword: seat.webPassword.length > 0 ? seat.webPassword : null,
|
|
is_pbx_group: false,
|
|
pbx_extension: seat.extension,
|
|
pbx_group_ids: seat.groups
|
|
}, { forceCli: seat.forceCli })
|
|
}).then(($subscriberId) => {
|
|
subscriberId = $subscriberId
|
|
setSeatIntraPbx(subscriberId, seat.clirIntrapbx)
|
|
if (seat.soundSet !== null && seat.soundSet !== undefined) {
|
|
return getSoundSet(seat.soundSet)
|
|
}
|
|
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.displayName
|
|
*/
|
|
export function setSeatDisplayName (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setDisplayName(options.seatId, options.displayName)
|
|
}).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.webUsername
|
|
*/
|
|
export function setSeatWebUsername (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setWebUsername(options.seatId, options.webUsername)
|
|
}).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 options
|
|
* @param options.seatId
|
|
* @param options.seatSIPPassword
|
|
*/
|
|
export function setSeatSIPPassword (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPbxSIPPassword(options.seatId, options.seatSIPPassword)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param clir
|
|
*/
|
|
export function setSeatClir (seatId, clir) {
|
|
return setPreferenceClir(seatId, clir)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param clirIntrapbx
|
|
*/
|
|
export function setSeatIntraPbx (seatId, clirIntrapbx) {
|
|
return setPreferenceIntraPbx(seatId, clirIntrapbx)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param musicOnHold
|
|
*/
|
|
export function setSeatMusicOnHold (seatId, musicOnHold) {
|
|
return setPreferenceMusicOnHold(seatId, musicOnHold)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param cli
|
|
*/
|
|
export function setSeatCli (seatId, cli) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
return setPreferenceCli(seatId, cli)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param announcementCfu
|
|
*/
|
|
export function setSeatAnnouncementCfu (seatId, announcementCfu) {
|
|
return setPreferenceAnnouncementCfu(seatId, announcementCfu)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param announcementCallSetup
|
|
*/
|
|
export function setSeatAnnouncementCallSetup (seatId, announcementCallSetup) {
|
|
return setPreferenceAnnouncementCallSetup(seatId, announcementCallSetup)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param announcementToCallee
|
|
*/
|
|
export function setSeatAnnouncementToCallee (seatId, announcementToCallee) {
|
|
return setPreferenceAnnouncementToCallee(seatId, announcementToCallee)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param ignoreCfWhenHunting
|
|
*/
|
|
export function setSeatIgnoreCfWhenHunting (seatId, ignoreCfWhenHunting) {
|
|
return setPreferenceIgnoreCfWhenHunting(seatId, ignoreCfWhenHunting)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param cstaClient
|
|
*/
|
|
export function setSeatCstaClient (seatId, cstaClient) {
|
|
return setPreferenceCstaClient(seatId, cstaClient)
|
|
}
|
|
|
|
/**
|
|
* @param seatId
|
|
* @param cstaController
|
|
*/
|
|
export function setSeatCstaController (seatId, cstaController) {
|
|
return setPreferenceCstaController(seatId, cstaController)
|
|
}
|
|
|
|
/**
|
|
* @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) => {
|
|
if (result.subscriber !== null && result.preferences !== null) {
|
|
return result
|
|
}
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).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)
|
|
}
|
|
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
|
|
}
|
|
}
|
|
/**
|
|
* @param options
|
|
* @param options.seatId
|
|
* @param options.ncosId
|
|
*/
|
|
export function setNcosSet (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
if (options.ncosId !== null && options.ncosId !== undefined) {
|
|
return getNcos(options.ncosId)
|
|
}
|
|
return Promise.resolve(null)
|
|
}).then((ncos) => {
|
|
const ncosName = _.get(ncos, 'level', null)
|
|
return setSubscriberNcos(options.seatId, ncosName)
|
|
}).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.ncosId
|
|
*/
|
|
export function NcosSet (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
if (options.ncosSetId !== null && options.ncosSetId !== undefined) {
|
|
return getNcosSet(options.ncosSetId)
|
|
}
|
|
return Promise.resolve(null)
|
|
}).then((ncosSet) => {
|
|
const ncosName = _.get(ncosSet, 'name', null)
|
|
return setSubscriberNcosSet(options.seatId, ncosName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(options.seatId)
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
/**
|
|
* @param options
|
|
* @param options.ncosId
|
|
*/
|
|
export function NcosSets (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
if (options.ncosSetId !== null && options.ncosSetId !== undefined) {
|
|
return getNcosSet(options.ncosSetId)
|
|
}
|
|
return Promise.resolve(null)
|
|
}).then((ncosSet) => {
|
|
const ncosName = _.get(ncosSet, 'name', null)
|
|
return setSubscriberNcosSet(getSubscriberId(), ncosName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(getSubscriberId())
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
/**
|
|
* @param options
|
|
* @param options.ncosId
|
|
*/
|
|
export function setNcosLevelSets (options) {
|
|
return new Promise((resolve, reject) => {
|
|
Promise.resolve().then(() => {
|
|
if (options.ncosId !== null && options.ncosId !== undefined) {
|
|
return getNcos(options.ncosId)
|
|
}
|
|
return Promise.resolve(null)
|
|
}).then((ncos) => {
|
|
const ncosName = _.get(ncos, 'level', null)
|
|
return setSubscriberNcos(getSubscriberId(), ncosName)
|
|
}).then(() => {
|
|
return getSubscriberAndPreferences(getSubscriberId())
|
|
}).then((result) => {
|
|
resolve({
|
|
seat: result.subscriber,
|
|
preferences: result.preferences
|
|
})
|
|
}).catch((err) => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|